1. 程式人生 > 實用技巧 >Atcoder Beginner Contest176題解

Atcoder Beginner Contest176題解

##A.Takoyaki

1 #include <bits/stdc++.h>
2 using namespace std;
3 signed main(void){
4     int n,x,t;
5     scanf("%d%d%d",&n,&x,&t);
6     if(n%x==0) printf("%d",n/x*t);
7     else printf("%d",(n/x+1)*t);
8     return 0;
9 } 

##B.Multiple of 9

 1 #include <bits/stdc++.h>
 2 using
namespace std; 3 signed main(void){ 4 string s; 5 int tot=0; 6 cin>>s; 7 for(int i=0;i<s.size();i++) tot+=int(s[i]-'0'); 8 if(tot%9==0) cout<<"Yes"<<endl; 9 else cout<<"No"<<endl; 10 return 0; 11 }

##C.Step

 1 #include <bits/stdc++.h>
 2
#define int long long 3 using namespace std; 4 signed main(void){ 5 int n,now,ans=0; 6 scanf("%lld",&n); 7 int a[n]; 8 for(int i=0;i<n;i++) scanf("%lld",&a[i]); 9 now=a[0]; 10 for(int i=1;i<n;i++){ 11 if(a[i]>=now) now=a[i]; 12 else ans+=now-a[i];
13 } 14 cout<<ans<<endl; 15 return 0; 16 }

##D.Wizard in Maze

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e3+5;
 4 char S[N][N];
 5 int f[N][N],dr[4][2]={{1,0},{-1,0},{0,1},{0,-1}},que[N*N],s,t,h,w,sx,sy,tx,ty;
 6 signed main(void){
 7     cin>>h>>w>>sx>>sy>>tx>>ty;
 8     for(int i=0;i<h;i++) {
 9         cin>>S[i];
10         for(int j=0;j<w;j++)
11             f[i][j]=S[i][j]=='#';
12     }
13     f[--sx][--sy]=1;
14     tx--,ty--;
15     que[t++]=sx*N+sy;
16     while(s<t){
17         int s1=s;
18         while(s<t){
19             int x=que[s++],y=x%N;
20             x/=N;
21             for(int i=0;i<4;i++){
22                 int x1=x+dr[i][0],y1=y+dr[i][1];
23                 if((unsigned)x1>=h||(unsigned)y1>=w||f[x1][y1])
24                     continue;
25                 f[x1][y1]=f[x][y];
26                 que[t++]=x1*N+y1;
27             }
28         }
29         while(s1<s){
30             int x=que[s1++],y=x%N;
31             x/=N;
32             for (int i=-2;i<3;i++) {
33                 for (int j=-2;j<3;j++) {
34                     int x1=x+i,y1=y+j;
35                     if((unsigned)x1>=h||(unsigned)y1>=w||f[x1][y1])
36                         continue;
37                     f[x1][y1]=f[x][y]+1;
38                     que[t++]=x1*N+y1;
39                 }
40             }
41         }
42     }
43     cout<<(f[tx][ty]?f[tx][ty]-1:-1);
44     return 0;
45 }

##E.Bomber

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=3e5+10;
 4 struct point {
 5     int x,y;
 6 }p[maxn];
 7 map<int,int> xcnt,ycnt;
 8 signed main(void){
 9     int n,m,k;
10     cin>>n>>m>>k;
11     int x,y,maxr=0,maxc=0;
12     for(int i=0;i<k;i++){
13         cin>>x>>y; 
14         p[i]={x,y};
15         xcnt[x]++,ycnt[y]++;
16         maxr=max(maxr,xcnt[x]),maxc=max(maxc,ycnt[y]);
17     }
18     int num1=0,num2=0;
19     for(auto tmp:xcnt)
20         if(tmp.second==maxr)
21             num1++;
22     for(auto tmp:ycnt)
23         if(tmp.second==maxc)
24             num2++;
25     int cnt=0;
26     for(int i=0;i<k;i++){
27         x=p[i].x,y=p[i].y;
28         if(xcnt[x]==maxr&&ycnt[y]==maxc)cnt++;
29     }
30     if(cnt==num1*num2)
31         cout<<(maxc+maxr-1)<<endl;
32     else
33         cout<<(maxc+maxr)<<endl;
34     return 0;
35 }