A:
签到题。
1 #include <iostream> 2 using namespace std; 3 int main(void) 4 { 5 long long n,x,t; 6 cin>>n>>x>>t; 7 if(n%x==0)cout<<n/x*t<<endl; 8 else cout<<(n/x+1)*t<<endl; 9 return 0; 10 }
B:
判断是否为9的倍数。
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main(void) 5 { 6 string s; 7 long long k=0; 8 cin>>s; 9 for(int i=0;i<s.size();i++) 10 { 11 k+=s[i]-'0'; 12 } 13 if(k%9==0)cout<<"Yes"<<endl; 14 else cout<<"No"<<endl; 15 return 0; 16 }
C:
从前到后,如果前面的比后面的高,把后面的提升到同一高度。(不开longlong见祖宗)
#include <iostream> #include <string> using namespace std; int main(void) { long long n,a,x,ans=0; cin>>n>>a; while(--n) { cin>>x; if(x<a)ans+=a-x; else a=x; } cout<<ans<<endl; return 0; }
D:
双端队列bfs,确保先跑完当前连通块再转其他连通块。这里的dis即为所用魔法次数。
1 #include <iostream> 2 #include <cstdio> 3 #include <deque> 4 using namespace std; 5 typedef pair<int,int>P; 6 const int INF=23333333; 7 int f[1100][1100],dis[1100][1100],h,w,x1,Y1,x2,y2; 8 int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0}; 9 char c[1100][1100]; 10 void bfs(void) 11 { 12 deque<P>q; 13 dis[x1][Y1]=0; 14 P start(x1,Y1); 15 q.push_front(start); 16 while(q.size()) 17 { 18 P t=q.front(); 19 q.pop_front(); 20 if(f[t.first][t.second])continue; 21 f[t.first][t.second]=1; 22 int x,y,d=dis[t.first][t.second]; 23 for(int i=0;i<4;i++) 24 { 25 x=t.first+dx[i],y=t.second+dy[i]; 26 if(x<0||x>=h||y<0||y>=w||c[x][y]=='#'||dis[x][y]<=d)continue; 27 dis[x][y]=d; 28 q.push_front(P(x,y)); 29 } 30 for(int i=t.first-2;i<=t.first+2;i++) 31 { 32 if(i<0||i>=h)continue; 33 for(int j=t.second-2;j<=t.second+2;j++) 34 { 35 if(j<0||j>=w||c[i][j]=='#'||dis[i][j]<=d+1)continue; 36 dis[i][j]=d+1; 37 q.push_back(P(i,j)); 38 } 39 } 40 } 41 } 42 int main(void) 43 { 44 scanf("%d %d %d %d %d %d",&h,&w,&x1,&Y1,&x2,&y2); 45 x1--;Y1--;x2--;y2--; 46 for(int i=0;i<h;i++)scanf("%s",c[i]); 47 for(int i=0;i<h;i++) 48 { 49 for(int j=0;j<w;j++)dis[i][j]=INF; 50 } 51 bfs(); 52 printf("%d ",dis[x2][y2]==INF?-1:dis[x2][y2]); 53 return 0; 54 }
E:
对每个目标所在的行、列+1,找出目标数最多的行和列进行组合,如果存在该点无目标的组合,则输出行列目标数的和;否则输出目标数的和减一。(减去当前位置的目标)(然鹅极端数据应该会超时的。。可能数据水一点)
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <map> 5 #include <vector> 6 using namespace std; 7 typedef pair<int,int>P; 8 int h[310000],w[310000]; 9 int H,W,m,x,y,maxh,maxw; 10 map<P,int>f; 11 int main(void) 12 { 13 scanf("%d %d %d",&H,&W,&m); 14 while(m--) 15 { 16 scanf("%d %d",&x,&y); 17 f[P(x,y)]=1; 18 h[x]++; 19 w[y]++; 20 } 21 for(int i=1;i<=H;i++)maxh=max(maxh,h[i]); 22 for(int i=1;i<=W;i++)maxw=max(maxw,w[i]); 23 vector<int>hh,ww; 24 for(int i=1;i<=H;i++) 25 { 26 if(h[i]==maxh)hh.push_back(i); 27 } 28 for(int i=1;i<=W;i++) 29 { 30 if(w[i]==maxw)ww.push_back(i); 31 } 32 for(int i=0;i<hh.size();i++) 33 { 34 for(int j=0;j<ww.size();j++) 35 { 36 if(f[P(hh[i],ww[j])]==0) 37 { 38 printf("%d ",maxw+maxh); 39 return 0; 40 } 41 } 42 } 43 printf("%d ",maxh+maxw-1); 44 return 0; 45 }
F:
待补。。