1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> int f[40005]; int getindex(int x, int y, int n){ return (x-1) * n + y; } int find(int v){ if(f[v] == v)return v; int F = find(f[v]); f[v] = F; return F; } int main() { int n, m; while(scanf("%d%d",&n,&m) != EOF){ for(int i = 1;i <= n * n; i++)f[i] = i; int flag = 1; for(int j = 1;j <= m; j++){ int x, y; char op; scanf("%d %d %c",&x,&y,&op); getchar(); int index1 = getindex(x, y, n); int index2 = op=='D'?getindex(x+1,y, n):getindex(x,y+1, n); int f1 = find(index1); int f2 = find(index2); if(f1 != f2)f[f1] = f2; else{ if(flag){ printf("%d\n",j); flag = 0; return 0; } } } if(flag)printf("draw\n"); } return 0; }C++ :
#include<iostream> #include<cstdio> using namespace std; struct node { int x,y; }f[301][301],k1,k2; int i,j,m,n,x,y; char c; node root(node k) { if((f[k.x][k.y].x==k.x)&&(f[k.x][k.y].y==k.y))return k; f[k.x][k.y]=root(f[k.x][k.y]); return f[k.x][k.y]; } int main() { cin>>n>>m; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { f[i][j].x=i; f[i][j].y=j; } } for(i=1;i<=m;i++) { cin>>x>>y>>c; if(c=='D') { k1=root(f[x][y]); k2=root(f[x+1][y]); } if(c=='R') { k1=root(f[x][y]); k2=root(f[x][y+1]); } if((k1.x==k2.x)&&(k1.y==k2.y)) { cout<<i<<endl; return 0; } else f[k1.x][k1.y]=k2; } cout<<"draw"<<endl; return 0; }
- 1
信息
- ID
- 1451
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者