Codeforces Round #815 (Div. 2) (补题中)
作者:互联网
战绩:
打到一半被叫走,回来后断断续续打完的。。。
A. Burenka Plays with Fractions
刚开始感觉被trick绕进去了,思路有点乱,就先去切B了。
实际上如果要a/b=c/d,我们只用判断a*d和b*c的关系就好。
注意判断0的情况。
int main() { cin>>T; while(T--) { cin>>a>>b>>c>>d; ll lima=a*d; ll limb=b*c; if(lima>limb) swap(lima,limb); if(lima==limb) cout<<0<<endl; else if(lima==0||limb==0) cout<<1<<endl; else if(limb%lima==0) cout<<1<<endl; else cout<<2<<endl; } return 0; }View Code
B. Interesting Sum
一开始没仔细读题,因为A没切出来,B就有些急。
实际上我们无论选那个区间,都能够选出最大次大最小次小四个数字。
排序计算即可。
int main() { read(T); while(T--) { read(n); for(int i=1;i<=n;i++) read(a[i]); sort(a+1,a+1+n); cout<<a[n]+a[n-1]-a[1]-a[2]<<endl; } return 0; }View Code
C. Corners
只要出现了这样的0,它周围八格存在另一个0,那么有多少个1就是答案。
否则如果是单独的0,答案是1的个数-1.
否则如果没有0,个数-2.
int main() { cin>>T; while(T--) { cin>>n>>m; getchar(); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { a[i][j]=getchar(); } getchar(); } bool flag=0,flag1=0; ll tot=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]=='0') flag1=1; else tot++; if(((a[i][j]==a[i][j-1])&&(j!=1))||((a[i][j]==a[i][j+1])&&(j!=m))||((a[i][j]==a[i+1][j])&&(i!=n))||((a[i][j]==a[i-1][j])&&(i!=1)) ||(a[i][j]==a[i+1][j+1]&&(i!=n&&j!=m))||(a[i][j]==a[i-1][j+1]&&(i!=1&&j!=m))||(a[i][j]==a[i+1][j-1]&&(i!=n&&j!=1))||(a[i][j]==a[i-1][j-1]&&(i!=1&&j!=1))) { if(a[i][j]=='0') flag=1; } } } if(flag) cout<<tot<<endl; else if(flag1) cout<<tot-1<<endl; else cout<<tot-2<<endl; } return 0; }View Code
标签:main,int,cin,补题,limb,Div,lima,815,View 来源: https://www.cnblogs.com/ztlsw/p/16601419.html