5970 格子游戏

题目描述 Description

Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3)   接着,他们两个轮流在相邻的点之间画上红边和蓝边: 直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n <= 200),他们的游戏实在是太长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写一个程序,帮助他们计算他们是否结束了游戏?

输入描述 Input Description

输入数据第一行为两个整数n和m。m表示一共画了m条线。以后m行,每行首先有两个数字(x, y),代表了画线的起点坐标,接着用空格隔开一个字符,假如字符是"D ",则是向下连一条边,如果是"R "就是向右连一条边。输入数据不会有重复的边且保证正确。

输出描述 Output Description

输出一行:在第几步的时候结束。假如m步之后也没有结束,则输出一行“draw”

样例输入 Sample Input

3 5 1 1 D 1 1 R 1 2 D 2 1 R 2 2 D

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

n <= 200

分类标签 Tags 点此展开

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int map[1001][1001];
 5 int now=1;
 6 int f[1000001];
 7 int find(int x)
 8 {
 9     if(f[x]!=x)
10     f[x]=find(f[x]);
11     return f[x];
12 }
13 void unionn(int r1,int r2)
14 {
15     f[r2]=r1;
16 }
17 int main()
18 {
19     int ans;
20     int flag=0;
21     int n,m;
22     int x1,y1;
23     int x2,y2;
24     char z;
25     cin>>n>>m;
26     for(int i=1;i<=n;i++)
27     for(int j=1;j<=n;j++)
28     {
29         map[i][j]=now;
30         now++;
31     }
32     for(int i=1;i<=n*n+20;i++)
33     f[i]=i;
34     
35     //scanf("%d%d",&n,&m);
36     for(int i=1;i<=m;i++)
37     {
38             cin>>x1>>y1;
39             cin>>z; 
40             if(z=='D')
41             {
42                 x2=x1+1;
43                 y2=y1;
44             }
45             else 
46             {
47                 x2=x1;
48                 y2=y1+1;
49             }
50             int r1=find(map[x1][y1]);
51             int r2=find(map[x2][y2]);
52             if(r1!=r2)
53             unionn(r1,r2);
54             else
55             {
56                 flag=1;
57                 ans=i;
58                 break;
59             }
60             
61     }
62     if(flag==1)
63     cout<<ans<<endl;
64     else
65     {
66         cout<<"draw";
67     }
68     return 0;
69 } 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 05:Cave Cows 1 洞穴里的牛之一

    总时间限制: 10000ms单个测试点时间限制: 1000ms内存限制: 262144kB描述 很少人知道其实奶牛非常喜欢到洞穴里面去探险。     洞窟里有N...

    attack
  • 01:数制转换

    01:数制转换 总时间限制: 1000ms 内存限制: 65536kB描述 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达...

    attack
  • BZOJ2434: [Noi2011]阿狸的打字机(AC自动机 树状数组)

    attack
  • 你应该知道这些有意思的代码

    Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable Mathematical Art 的比赛,参赛者需要用三条推...

    用户6543014
  • Leetcode刷题记录:计算复数乘法

    大江小浪
  • hdu1030

    @坤的
  • 05:Cave Cows 1 洞穴里的牛之一

    总时间限制: 10000ms单个测试点时间限制: 1000ms内存限制: 262144kB描述 很少人知道其实奶牛非常喜欢到洞穴里面去探险。     洞窟里有N...

    attack
  • 搜索专题

    POJ  Best Sequence http://poj.org/problem?id=1699 题意:给你n个字符窜,求其所能拼接的最短长度。 分析:预处理...

    用户1624346
  • 不同路径(动态规划)- leetcode 62

    最近在看leetcode的题目,都是面试题,需要面试的同学可以努力刷这里的题目,因为很多公司的面试笔试题都是参考这个上面的。相对OJ上的题目,感...

    ACM算法日常
  • Java实现图片的滤镜效果滤镜实现总结

    在移动端或者在web开发时处理图片都是一件麻烦的事儿。我调研过很多library,特别是在移动端处理图片时动不动都需要使用 C++ 或者 OpenCV。这对于 ...

    fengzhizi715

扫码关注云+社区

领取腾讯云代金券