zoukankan      html  css  js  c++  java
  • 可恶的数字逻辑

    Accept:10     Submit:34
    Time Limit:1000MS     Memory Limit:65536KB
    Description
    为了准备期末考试了,laprovence正被讨厌的数字逻辑搞的头昏脑胀,尤其后面的一堆乱七八糟的概念,简直不知所云@#~!*&~
    这不有道简单的题就把他给难住了,题目大意是这样的:给出n个发光二极管,每个二极管都有两种状态,亮(on)与灭(off),然后给出一组每两个二极管之间的约束关系,
    约束关系有以下3 种
    1)a and b 表示第a个与第b个二极管必须同时亮
    2)a or b表示第a个与第b个二极管至少有一个亮
    3)a xor b 表示第a个与第b个二极管必须是一个亮,一个灭



    Input
    第一行两个整数n(二极管的个数,n<=10),m(m组约束关系,m<=50)
    然后m行约束关系以a and b,a or b,a xor b的形式给出
    多组测试数据,当n=0,m=0时结束



    Output
    输出每个二极管的状态(一行,每两个状态之间用空格隔开,最后一个不要空格,保证只有一组解),如果没有解输出No solution

    Sample Input

    2 1
    1 and 2
    3 3
    1 and 2
    2 xor 3
    1 and 3
    0 0


    Sample Output

    on on
    No solution


    View Code
      1 #include<iostream>
    2 using namespace std;
    3 struct node
    4 {
    5 int l;
    6 char ch[5];
    7 int r;
    8 }map[60];
    9 int ans[12];
    10 int n,m;
    11 bool finds()
    12 {
    13 int i;
    14 for(i=0;i<m;i++)
    15 {
    16 if(map[i].ch[0]=='a')
    17 {
    18 if(ans[ map[i].l ]!=0 && ans[ map[i].r ]!=0 )
    19 { ans[ map[i].l ]=1; ans[ map[i].r ]=1; continue;}
    20 else return 0;
    21 }
    22 if(map[i].ch[0]=='x')
    23 {
    24 if(ans[ map[i].l ]==-1 && ans[ map[i].r ]==0)//-1 0
    25 {
    26 ans[ map[i].l ]=1;continue;
    27 }
    28 if(ans[ map[i].l ]==-1 && ans[ map[i].r ]==1)//-1 1
    29 {
    30 ans[ map[i].l ]=0;continue;
    31 }
    32 if(ans[ map[i].l ]==0 && ans[ map[i].r ]==-1)//0 -1
    33 {
    34 ans[ map[i].r ]=1;continue;
    35 }
    36 if(ans[ map[i].l ]==0 && ans[ map[i].r ]==0)//0 0
    37 {
    38 return 0;
    39 }
    40 if(ans[ map[i].l ]==0 && ans[ map[i].r ]==1)//0 1
    41 {
    42 continue;
    43 }
    44 if(ans[ map[i].l ]==1 && ans[ map[i].r ]==-1)//1 -1
    45 {
    46 ans[ map[i].r ]=0;continue;
    47 }
    48 if(ans[ map[i].l ]==1 && ans[ map[i].r ]==0)//1 0
    49 {
    50 continue;
    51 }
    52 if(ans[ map[i].l ]==1 && ans[ map[i].r ]==1)//1 1
    53 {
    54 return 0;
    55 }
    56 }
    57 if(map[i].ch[0]=='o')
    58 {
    59 if(ans[ map[i].l ]==-1 && ans[ map[i].r ]==0)//-1 0
    60 {
    61 ans[ map[i].l ]=1;continue;
    62 }
    63 if(ans[ map[i].l ]==0 && ans[ map[i].r ]==-1)//0 -1
    64 {
    65 ans[ map[i].r ]=1;continue;
    66 }
    67 if(ans[ map[i].l ]==0 && ans[ map[i].r ]==0)//0 0
    68 {
    69 return 0;
    70 }
    71 }
    72 }
    73 return 1;
    74
    75 }
    76 int main()
    77 {
    78 int i;
    79 while(cin>>n>>m&&(n||m))
    80 {
    81 memset(ans,-1,sizeof(ans));
    82 for(i=0;i<m;i++)
    83 {
    84 cin>>map[i].l>>map[i].ch>>map[i].r;
    85 }
    86 for(i=1;i<=n;i++)
    87 {
    88 if(ans[i]==-1)
    89 {
    90 if(finds()) i=0;
    91 else break;
    92 }
    93 }
    94 if(i>n)
    95 {
    96 for(i=1;i<=n;i++)
    97 {
    98 if(ans[i])
    99 cout<<"on";
    100 else
    101 cout<<"off";
    102 if(i!=n)
    103 {
    104 cout<<' ';
    105 }
    106 }
    107 cout<<endl;
    108 }else
    109 cout<<"No solution"<<endl;
    110 }
    111 return 0;
    112 }
  • 相关阅读:
    【VS开发】【电子电路技术】VPX技术介绍
    【VS开发】【电子电路技术】VPX技术介绍
    【VS开发】【DSP开发】浅谈Linux PCI设备驱动(二)
    【VS开发】【DSP开发】浅谈Linux PCI设备驱动(二)
    【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)
    【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)
    【Linux开发】彻底释放Linux线程的资源
    【Linux开发】彻底释放Linux线程的资源
    【VS开发】C++线程安全
    【VS开发】C++线程安全
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2383478.html
Copyright © 2011-2022 走看看