zoukankan      html  css  js  c++  java
  • CodingTrip

    剪刀石头布

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 4   Accepted Submission(s) : 1

    Font: Times New Roman | Verdana | Georgia

    Font Size:  

    Problem Description

    现有M个人一起玩剪刀石头布,以1-M编号,每人出一种,出过不再改变,但是我们并不知道它到底是哪一种。 (其中石头赢剪刀,剪刀赢布,布赢石头,一样则平)
    裁判用两种说法对这M个人所构成的输赢关系进行描述: 
    一:"1 A B",表示第A个人和第B个人出的一样。 
    二:"2 A B",表示第A个人赢第B个人。 
    裁判对M个人,用以上两种说法,连说N句话,其中有真的、也有假的。
    一句话出现以下情况,就是假话,否则就是真话。 
    1) 该句话与之前的某些真话冲突; 
    2) 该句话中A或B比M大; 
    3) 该句话表示A赢A。 

    请根据给定的M和N,输出假话数。
    其中(1 <= M <= 10,000),(0 <= N <= 10,000)

    Input

    第1行是一个自然数K,代表有K组数据。
    每组数据以一个空行分隔,其中每组数据的第1行是两个自然数M、N,以空格分开。 
    每组数据的第2行至N+1行,每行是三个自然数X,A,B,三个数之间用空格分开,X(1或2)表示说法的种类。

    Output

    每组数据对应一行,每行有一个整数,代表假话数。

    Sample Input

    3
    
    43 11
    1 4 3
    2 3 3
    1 4 1
    1 4 4
    2 3 3
    1 2 2
    2 1 4
    1 1 1
    2 1 4
    2 3 4
    2 3 2
    
    66 9
    2 3 1
    2 4 4
    2 1 2
    2 4 3
    2 4 2
    2 2 3
    1 3 2
    1 2 1
    1 1 1
    
    6 7
    2 3 7
    2 1 2
    2 4 4
    1 2 1
    1 3 2
    1 2 3
    2 1 3
    

    Sample Output

    5
    4
    3

    详见POJ1182···(PS:携程好多陈题,传说第二题也是POJ上面的题···)
      1 /*
      2 ID: asif
      3 LANG: C++
      4 TASK: test
      5 */
      6 //# pragma comment(linker, "/STACK:102400000,102400000")
      7 # include<iostream>
      8 # include<cstdio>
      9 # include<cstdlib>
     10 # include<cstring>
     11 # include<algorithm>
     12 # include<cctype>
     13 # include<cmath>
     14 # include<string>
     15 # include<set>
     16 # include<map>
     17 # include<stack>
     18 # include<queue>
     19 # include<vector>
     20 # include<numeric>
     21 using namespace std;
     22 const int maxn=100010;
     23 const double inf=0.000001;
     24 const int INF=~0U>>1;
     25 const int mod=1000000007;
     26 # define PI (acos(0)*2.0)
     27 # define lson l,m,rt<<1
     28 # define rson m+1,r,rt<<1 | 1
     29 # define PS printf("
    ")
     30 # define S(n) scanf("%d",&n)
     31 # define P(n) printf("%d
    ",n)
     32 # define Ps(n) printf(" %d",(n))
     33 # define SB(n) scanf("%lld",&n)
     34 # define PB(n) printf("%lld
    ",n)
     35 # define PBs(n) printf(" %lld",n)
     36 # define SD(n) scanf("%lf",&n)
     37 # define PD(n) printf("%.3lf
    ",n)
     38 # define Sstr(s) scanf("%s",s)
     39 # define Pstr(s) printf("%s
    ",s)
     40 # define S0(a) memset(a,0,sizeof(a))
     41 # define S1(a) memset(a,-1,sizeof(a))
     42 typedef long long ll;
     43 int n,f[maxn],p[maxn],m;
     44 int equal(double x,double y)
     45 {
     46     if(x-y>=-inf&&x-y<=inf)
     47         return 0;
     48     else if(x-y>inf)
     49         return 1;
     50     return -1;
     51 }
     52 void init()
     53 {
     54     for(int i=0;i<=n;i++)
     55         f[i]=i,p[i]=0;
     56 }
     57 int find(int x)
     58 {
     59     if(x==f[x])
     60         return x;
     61     int fx=find(f[x]);
     62     p[x]=(p[x]+p[f[x]])%3;
     63     f[x]=fx;
     64     return f[x];
     65 }
     66 bool unin(int a,int x,int y)
     67 {
     68     a--;
     69     int fx=find(x);
     70     int fy=find(y);
     71     if(fx==fy)
     72     {
     73         if((p[y]-p[x]+3)%3!=a)
     74             return true;
     75         return false;
     76     }
     77     f[fy]=fx;
     78     p[fy]=(p[x]-p[y]+3+a)%3;
     79     return false;
     80 }
     81 int main()
     82 {
     83     //freopen("input.in", "r", stdin);
     84     //freopen("output.out", "w", stdout);
     85     int T;
     86     S(T);
     87     while(T--)
     88     {
     89         S(n),S(m);
     90         init();
     91         int ans=0;
     92         while(m--)
     93         {
     94             int a,u,v;
     95             S(a),S(u),S(v);
     96             if(u>n||v>n||(a==2&&u==v))
     97                 ans++;
     98             else
     99             {
    100                 if(unin(a,u,v))
    101                     ans++;
    102             }
    103         }
    104         P(ans);
    105     }
    106     return 0;
    107 }
    View Code
  • 相关阅读:
    hdu 5645 DZY Loves Balls
    idea2016的使用心得 --- 太棒了
    20170410 --- Linux备课资料 --- 压缩与解压缩
    20170410 --- Linux备课资料 --- vim的使用
    mysql20170410练习代码+笔记
    你说你有多坑?----超市项目错误总结
    说好的不熬夜呢???!!!! -- 超市项目
    那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
    今天思考一个问题 --- 自己的强项是什么??
    sleep()和wait()的区别 --- 快入睡了,突然想起一个知识点,搞完就睡
  • 原文地址:https://www.cnblogs.com/asif/p/3659995.html
Copyright © 2011-2022 走看看