A:
找出第几位数是0.
1 #include <iostream> 2 using namespace std; 3 int main(void) 4 { 5 for(int i=1;i<=5;i++) 6 { 7 int x; 8 cin>>x; 9 if(x==0) 10 { 11 cout<<i<<endl; 12 } 13 } 14 return 0; 15 }
B:
鸡兔同笼,判断是否合理。
1 #include <iostream> 2 using namespace std; 3 int x,y; 4 int main(void) 5 { 6 cin>>x>>y; 7 if(4*x<y||y<2*x)cout<<"No"<<endl; 8 else 9 { 10 if((4*x-y)%2)cout<<"No"<<endl; 11 else cout<<"Yes"<<endl; 12 } 13 return 0; 14 }
C:
找出距离X最近的没有出现的数。注意答案可能是101.
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 int x,n,a[110]; 5 int main(void) 6 { 7 cin>>x>>n; 8 for(int i=1;i<=n;i++) 9 { 10 int y; 11 cin>>y; 12 a[y]=1; 13 } 14 int minn=110,now=110; 15 for(int i=105;i>=0;i--) 16 { 17 if(!a[i]&&(fabs(i-x)<minn||fabs(i-x)==minn&&i<now)) 18 { 19 minn=fabs(i-x); 20 now=i; 21 } 22 } 23 cout<<now<<endl; 24 }
D:
找出数列中不是其他数的倍数的数的个数(拗口)。用小数筛大数。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int n,a[2100000],ans; 5 int main(void) 6 { 7 cin>>n; 8 for(int i=1;i<=n;i++) 9 { 10 int x; 11 cin>>x; 12 a[x]++; 13 } 14 for(int i=1;i<=1000000;i++) 15 { 16 if(a[i]==1)ans++; 17 if(a[i]>0) 18 { 19 for(int j=i;j<=1000000;j+=i) 20 { 21 a[j]=0; 22 } 23 } 24 } 25 cout<<ans<<endl; 26 }
E:
对每次变换求所有集合最大值中的最小值。用s[]表示各个集合,m表示最大值集合,每次对集合元素删除加入。注意元素有可能相同,所以要用multiset.
1 #include <iostream> 2 #include <set> 3 using namespace std; 4 int a[210000],k[210000],n,q,num,to; 5 multiset <int>s[210000]; 6 multiset <int>m; 7 int main(void) 8 { 9 cin>>n>>q; 10 for(int i=1;i<=n;i++) 11 { 12 cin>>a[i]>>k[i]; 13 s[k[i]].insert(a[i]); 14 } 15 for(int i=1;i<=200000;i++) 16 { 17 18 if(s[i].size()>0) 19 { 20 m.insert(*(s[i].rbegin())); 21 } 22 } 23 for(int i=1;i<=q;i++) 24 { 25 cin>>num>>to; 26 m.erase(m.find(*s[k[num]].rbegin())); 27 s[k[num]].erase(s[k[num]].find(a[num])); 28 if(s[k[num]].size()>0)m.insert(*s[k[num]].rbegin()); 29 if(s[to].size()>0)m.erase(m.find(*s[to].rbegin())); 30 s[to].insert(a[num]); 31 m.insert(*s[to].rbegin()); 32 k[num]=to; 33 cout<<*(m.begin())<<endl; 34 } 35 return 0; 36 }
F:
bfs模拟,要注意方向,因为方向不同可能会导致跳过正确路线(迷了好久)。
1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 using namespace std; 5 int H,w,k,X,Y,xx,yy,maxx=23333333; 6 int q[4]={-1,0,1,0}; 7 int p[4]={0,1,0,-1}; 8 vector<int>l[3]; 9 int main(void) 10 { 11 cin>>H>>w>>k>>xx>>yy>>X>>Y; 12 xx--;yy--;X--;Y--; 13 char c[H][w]; 14 int f[H][w]; 15 for(int i=0;i<H;i++) 16 { 17 for(int j=0;j<w;j++) 18 { 19 cin>>c[i][j]; 20 f[i][j]=maxx; 21 } 22 } 23 int h=0,r=1; 24 l[0].push_back(xx);l[1].push_back(yy);l[2].push_back(0); 25 f[xx][yy]=0; 26 while(h<r) 27 { 28 for(int i=0;i<4;i++) 29 { 30 int x1=l[0][h],y1=l[1][h]; 31 for(int j=0;j<k;j++) 32 { 33 x1+=q[i];y1+=p[i]; 34 if(x1<0||x1>=H||y1<0||y1>=w||c[x1][y1]=='@'||f[x1][y1]<l[2][h]+1)break; 35 if(f[x1][y1]>l[2][h]+1) 36 { 37 f[x1][y1]=l[2][h]+1; 38 l[0].push_back(x1);l[1].push_back(y1);l[2].push_back(l[2][h]+1); 39 r++; 40 } 41 } 42 } 43 h++; 44 } 45 if(f[X][Y]==maxx)cout<<"-1"<<endl; 46 else cout<<f[X][Y]<<endl; 47 return 0; 48 }