AtCoder Beginner Contest 069
AtCoder Beginner Contest 069
比赛链接:https://abc069.contest.atcoder.jp/
A题题解:水题,N*M划出来的方块是(N-1)*(M-1)。
AC代码:
1 #include<iostream> 2 using namespace std; 3 int n,m; 4 int main() 5 { 6 cin>>n>>m; 7 cout<<(n-1)*(m-1)<<endl; 8 return 0; 9 }
B题题解:用length计算字符串S长度N,输出S[0],N-2,S[N-1]即可。
AC代码:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 string s; 5 int main() 6 { 7 cin>>s; 8 int n = s.length(); 9 cout<<s[0]<<n-2<<s[n-1]<<endl; 10 return 0; 11 }
C题题解:如果是4的倍数,正好可以放在两个数的中间,那么最大能放的数就是4的倍数的数*2+1,其中特殊的情况为不是4的倍数却是2的倍数的数有两个及两个以上是可以放在两个4的倍数的数的中间。
AC代码:
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 const int maxn = 500005; 5 int a[maxn]; 6 int n,sum1,sum2; 7 int main() 8 { 9 cin>>n; 10 for(int i=1;i<=n;i++) 11 { 12 cin>>a[i]; 13 if(a[i]%4==0)sum1++; 14 else if(a[i]%4==2)sum2++; 15 } 16 if(sum2>1) 17 { 18 int ans=sum2+sum1*2; 19 if(ans>=n)cout<<"Yes"<<endl; 20 else cout<<"No"<<endl; 21 } 22 else 23 { 24 int ans = sum1*2; 25 if(sum1)ans++; 26 if(ans>=n)cout<<"Yes"<<endl; 27 else cout<<"No"<<endl; 28 } 29 return 0; 30 }
D题题解:找出任意一组解即可,那么从第一种颜色开始画到最后一种颜色,奇数行往右画,偶数行往左画即可。
AC代码:
1 #include<iostream> 2 using namespace std; 3 const int maxn = 107; 4 int a[maxn*maxn]; 5 int d[maxn][maxn]; 6 int n,m,c; 7 int main() 8 { 9 cin>>n>>m>>c; 10 for(int i=1;i<=c;i++)cin>>a[i]; 11 int k = 1; 12 for(int i=1;i<=n;i++) 13 { 14 for(int j=1;j<=m;j++) 15 { 16 if(i&1) 17 { 18 if(a[k]>0) 19 { 20 d[i][j]=k; 21 a[k]--; 22 if(a[k]==0)k++; 23 } 24 } 25 else 26 { 27 if(a[k]>0) 28 { 29 d[i][m-j+1]=k; 30 a[k]--; 31 if(a[k]==0)k++; 32 } 33 } 34 } 35 } 36 for(int i=1;i<=n;i++) 37 { 38 for(int j=1;j<=m;j++) 39 { 40 cout<<d[i][j]<<" "; 41 } 42 cout<<endl; 43 } 44 }