A:
这是一道红果果的水题啊。。。。好坑爹。。。暴力一直不过。。。。WA了4遍呐。。。。。。时间过了1个小时后,打算用dfs写。。。浪费了好多脑细胞。。。大神2分钟就过了。。。我还要1个多小时才过。。。我还是太弱了。。。我是白痴。。。5555。。。今天一早知道了学姐的做法,奇行奇列和偶行偶列用B,其他的用W。。。。要是能想到果然很水。。。。哭晕在厕所惹。。。接下来俩种代码都贴一下吧。。。
//dfs #include <stdio.h> int n,m; char a[105][105]; int limit(int x,int y) { if(x>=0&&x<n&&y>=0&&y<m&&a[x][y]=='.') return 1; return 0; } void dfs(int x,int y) { if(limit(x-1,y)) { if(a[x][y]=='B') a[x-1][y]='W'; else a[x-1][y]='B'; dfs(x-1,y); } if(limit(x+1,y)) { if(a[x][y]=='B') a[x+1][y]='W'; else a[x+1][y]='B'; dfs(x+1,y); } if(limit(x,y-1)) { if(a[x][y]=='B') a[x][y-1]='W'; else a[x][y-1]='B'; dfs(x,y-1); } if(limit(x,y+1)) { if(a[x][y]=='B') a[x][y+1]='W'; else a[x][y+1]='B'; dfs(x,y+1); } } int main() { int i,j, ff; while(~scanf("%d%d%*c",&n,&m)) { for(i=0;i<n;i++) gets(a[i]); for(i=0;i<n; i++) for(j=0;j<m; j++) if(a[i][j]=='.') { a[i][j]='B'; dfs(i,j); } for(i=0;i<n;i++) puts(a[i]); } return 0; }
//水过~~~代码亲测能过da~~ #include <stdio.h> int main() { int n,m, i,j; char a[105][105]; while(~scanf("%d%d%*c",&n,&m)) { for(i=0;i<n;i++) gets(a[i]); for(i=0;i<n; i++) { for(j=0;j<m; j++) { if(a[i][j]=='.') { if((i%2&&j%2)||(i%2==0&&j%2==0)) printf("B"); else printf("W"); } else printf("-"); } printf("\n"); } } return 0; }
B:
用并查集做的,先找有几个没有连在一起的,总的减去它,就是有最多种的化学药品能混在一起,再用2的次方就能求出最大危险值。这只是我的理解,有什么错误请各位大神斧正~~~以下是代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int N,M; int set[1005]; int temp; int find(int x) { return set[x]=(set[x]==x?x:find(set[x])); } void merge(int a,int b) { for(int i=1;i<=N;i++) { int x=find(a),y=find(b); if(x!=y) { set[x]=y; temp--; } } } int main() { while(~scanf("%d%d",&N,&M)) { int a,b; temp=N-1; for(int j=1;j<=N;j++) { set[j]=j; } for(int i=1;i<=M;i++) { scanf("%d%d",&a,&b); merge(a,b); } printf("%.0lf\n",pow(2,N-temp-1)); } return 0; }
C:
C题真的要哭晕在厕所惹了啦~~~。。。草鸡大水题。。。。5555.就这么放过了。。。好讨厌啦。。。。。。主要是我英语渣。。。。不想看英语。英语和智商皆是硬伤啊。。。。。。说多了都是水啊。。。55555以下是代码
#include <cstdio> #define N 517 double MAX(double a, double b) { return a>b?a:b; } int main() { int n, m; int x[N]; int a, b, c; while(~scanf("%d%d",&n,&m)) { int i, j; for(i = 1; i <= n; i++) { scanf("%d",&x[i]); } double max = 0, t; for(i = 1; i <= m; i++) { scanf("%d%d%d",&a,&b,&c); t =(double) (x[a]+x[b])/c; max = MAX(max, t); } printf("%.15f\n",max); } return 0; }
Codeforces Rounds #254 div2:A,B,C
时间: 2024-10-10 19:14:49