这两天钻我的模拟赛钻得思想僵化了,本来打算弃考,最后半小时才决定手糊一波。
T1
原题……$dp$ / bfs都行(因为所有边权都是 $1$,第一次扩展到的就是最短路)。
然而我判错了向左走的情况,一下被爆了,降智。
1 #include<bits/stdc++.h> 2 using namespace std; 3 inline int read(){ 4 int x=0; bool f=1; char c=getchar(); 5 for(;!isdigit(c);c=getchar()) if(c=='-') f=0; 6 for(; isdigit(c);c=getchar()) x=(x<<3)+(x<<1)+(c^'0'); 7 if(f) return x; 8 return 0-x; 9 } 10 int a,b,dp[200002]; 11 int main(){ 12 freopen("meet.in","r",stdin); 13 freopen("meet.out","w",stdout); 14 a=read(),b=read(); 15 memset(dp,0x7f,sizeof dp); 16 dp[a]=0; 17 for(int i=a-1;i>=0;--i) dp[i]=dp[i+1]+1; 18 for(int i=0;i<=b;++i){ 19 dp[i+1]=min(dp[i+1],dp[i]+1); 20 if((i<<1)-1<=b) dp[i<<1]=min(dp[i<<1],dp[i]+1), dp[(i<<1)-1]=min(dp[(i<<1)-1],dp[i]+2); 21 } 22 printf("%d\n",dp[b]); 23 return 0; 24 }
T2
我之前做过类似的题,然后现在又忘了-_- 再次降智
题解 $pdf$ 里面貌似写的很清楚了,这里再补充一下,可以提前预处理出 $C_{1}^{1}$