题意:有四个类别1.A和B都包含,2.只包含A不包含B,3.只包含B不包含A,4.A和B都不包含,A,B是课程,然后n行m列数字只包含1和0,1表示包含0表示不包含,求这n行这四类那种情况最多,并输出哪两种课程应该被选择,选择条件是A,B满足在n行中这四种都出现。
思路:直接遍历查找所有情况然后记录最大值输出即可。
代码如下:
#include<bits/stdc++.h> using namespace std; typedef long long LL; #define INF 0x3f3f3f3f int p[105][105]; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { scanf("%d",&p[i][j]); } } int a=0,b=0,c=0,d=0,x=0,y=0; int sum=INF,ans; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(i==j) continue; a=0;b=0;c=0;d=0; for(int k=0;k<n;k++) { if(p[k][i]&&p[k][j]) a++; if(p[k][i]&&p[k][j]==0) b++; if(p[k][i]==0&&p[k][j]) c++; if(p[k][i]==0&&p[k][j]==0) d++; } ans=0; ans=max(ans,a); ans=max(ans,b); ans=max(ans,c); ans=max(ans,d); if(ans<sum) { sum=ans; x=i;y=j; } } } printf("%d\n",sum); printf("%d %d\n",x+1,y+1); }B URAL 2095
水题直接上代码:
#include<bits/stdc++.h> using namespace std; typedef long long LL; #define INF 0x3f3f3f3f int main() { int n,m; scanf("%d%d",&n,&m); int a=2,b=2,ans=n-1; while(ans>=a) { ans-=(ans/a); a++; } while(m>=b) { m-=(m/b); b++; } printf("%d\n",m-ans); }CGym 100971J
题意:这题说实在的题意是有问题的,描述可能有一定的漏洞,想的多的人可能会多考虑情况,输入的是一个字符矩阵由‘.‘,’#‘和两数字构成问能否将两数字位置交换,且当两数字相邻时不能交换。
思路:因为没说明同时出发也没说明一个走的时候另一个必须走,所以就出现只要出现T字路口就可以交换,还有一种情况是两个相邻但连接两个的'.'却有2个以上。根据这个就能AC了。在处理上有个问题就是由于n×m是200000所以用二维数组就会爆,所以可以用vector或者map。
代码如下:
#include<iostream> #include<algorithm> #include<string.h> #include<cstdio> #include<vector> using namespace std; typedef long long LL; #define INF 0x3f3f3f3f vector<string>str(200005); int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; int main() { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { cin>>str[i]; } int flag=1; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { int ans=0; if(str[i][j]!='#') { for(int k=0;k<4;k++) { int xx=dx[k]+i; int yy=dy[k]+j; if(xx<0||yy<0||xx>=n||yy>=m) continue; if(str[xx][yy]!='#') ans++; } } if(ans>=3) { printf("YES\n");return 0; } if(ans==1) flag=0; } } if(flag==0) printf("NO\n"); else printf("YES\n"); }G Gym 100971F
数学水题不解释。
代码如下:
#include<bits/stdc++.h> using namespace std; typedef long long LL; #define INF 0x3f3f3f3f int main() { int x1,x2,y1,y2,v1,u1,v2,u2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); scanf("%d%d%d%d",&v1,&u1,&v2,&u2); double a=((v1-v2)*(v1-v2)+(u1-u2)*(u1-u2)); double b=2*((x1-x2)*(v1-v2)+(y1-y2)*(u1-u2)); double c=((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); double ans=(4*a*c-b*b)/(4*a); if(a*b<0) printf("%.6f\n",sqrt(ans)); else printf("%.6f\n",sqrt(c)); }H CodeForces 631C
这题我的博客之前写过可以去Codeforces文章分类里找,这里不再叙述。