zoukankan      html  css  js  c++  java
  • 17232 伪Acmer的推理(传递闭包)

     

    17232 伪Acmer的推理

    时间限制:1000MS  内存限制:65535K
    提交次数:0 通过次数:0 收入:0

    题型: 编程题   语言: G++;GCC

     

    Description

    现在正是期末,在复习离散数学的Acmer遇到了问题,你能帮助他吗?
    Acmer正在复习的是推理,不过他的推理系统可能与别人的不一样。
    (所以说他是一个伪Acmer~。做完这题,请自觉把这里伪Acmer自己定义的概念忘了。。否则到时学离散的时候混淆了概念的话自重。。。)
    他的推理系统定义如下:
    1.用大写英文字母A-Z表示一个命题。
    2.用A→B表示若命题A成立则命题B成立。
    3.用A↔B表示A→B且B→A。
    (这里2,3皆表示一种逻辑关系。)
    推理就是由若干个命题或逻辑关系出发,推出新的命题或逻辑关系。
    如,已知A→B和B→C,我们可以推出A→C。
    又如,已知A→B和A,我们可以推出B。
    再如,如果仅有A、B成立,是不可以推出A→B的。
    。。。。。。
    现在Acmer已经知道了n个命题或逻辑关系是成立的。而且,他从这些前提出发,又推出了m个新的命题或逻辑关系出来。
    不过,他的推理过程并不一定正确。所以,你能告诉他这m个结论中哪些是正确的,哪些是错误的吗?




    输入格式

    单case输入。
    第一行是一个整数n(0<=n<=100)。
    接下来n行,每行表示1个已知成立的命题或逻辑关系。
    每行首先是一个数字x(1<=x<=3),
      若是1,后面接一个大写英文字母,表示一个命题。
      若是2,后面接两个大写英文字母,表示逻辑关系→。
      若是3,后面接两个大写英文字母,表示逻辑关系↔。
    接着是一个整数m(0 < m <= 100)。
    接下来m行,每行表示1个要求判断正误的命题或逻辑关系。
    每行的格式同上。



    输出格式

    输出m行。对每个要你判断的结论,正确的话输出“yes”,否则输出“no”。



     

    输入样例

    Sample#1:
    2
    2	A 	B
    2	B	C
    1
    2	A	C
    
    Sample#2:
    1
    2	A	B
    1
    1	B
    
    Sample#3:
    2
    2	A	B
    1	A
    1
    1	B



     

    输出样例

    Sample#1:
    yes
    
    Sample#2:
    no
    
    Sample#3:
    yes



     

    提示

    Sample#不是输入输出的一部分。
    注意区别命题和逻辑关系成立的不同。
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int a[30][30];
    int n;
    void Warshall()
    {
        int i,j,k;
        for(k=0; k<26; k++) //依次取得的可以作为中间点的顶点
        {
            for(i=0; i<26; i++)
            {
                for(j=0; j<26; j++)
                {
                    if (a[i][k]>0&&a[k][j]>0)
                    {
                        if (a[i][i]==2||a[k][k]==2)
                        a[j][j]=2;
                        if (a[i][j]!=2)
                        a[i][j]=1;
                    }
                }
            }
        }
    }
    int main()
    {
       // freopen("data.txt","r",stdin);
        int m,t;
        char ch1,ch2;
        scanf("%d
    ",&n);
        for (int j=0; j<26; j++)
        {
            a[j][j]=1;
        }
        for (int i=0; i<n; i++)
        {
            scanf("%d
    ",&t);
            if (t==1)
            {
                scanf("%c",&ch1);
                a[ch1-'A'][ch1-'A']=2;
            }
            else if (t==2)
            {
                scanf("%c	%c",&ch1,&ch2);
                a[ch1-'A'][ch2-'A']=1;
            }
            else if (t==3)
            {
                scanf("%c	%c",&ch1,&ch2);
                 a[ch1-'A'][ch2-'A']=1;
                 a[ch2-'A'][ch1-'A']=1;
            }
        }
        Warshall();
        scanf("%d
    ",&m);
        for (int i=0; i<m; i++)
        {
            scanf("%d
    ",&t);
            if (t==1)
            {
                scanf("%c",&ch1);
                if (a[ch1-'A'][ch1-'A']==2)
                {
                    printf("yes
    ");
                    continue;
                }
            }
            else if (t==2)
            {
                scanf("%c	%c",&ch1,&ch2);
                if (a[ch1-'A'][ch2-'A']!=0)
                {
                    printf("yes
    ");
                    continue;
                }
            }
            else if (t==3)
            {
                scanf("%c	%c",&ch1,&ch2);
                if (a[ch1-'A'][ch2-'A']!=0&&a[ch2-'A'][ch1-'A']!=0)
                {
                    printf("yes
    ");
                    continue;
                }
            }
            printf("no
    ");
        }
        return 0;
    }

     

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 相关阅读:
    西门子S7-300 设置IP、子网掩码
    [WCF编程]9.性能与限流
    [WCF编程]8.服务实例的生命周期
    [WCF编程]7.实例上下文模式
    [WCF编程]6.绑定行为
    [WCF编程]5.绑定概述
    [WCF编程]4.契约概述
    [WCF编程]3.WCF基础
    [WCF编程]2.SOA概述
    [WCF实践]1.WCF使用net.tcp寄宿到IIS中
  • 原文地址:https://www.cnblogs.com/scaugsh/p/5532464.html
Copyright © 2011-2022 走看看