zoukankan      html  css  js  c++  java
  • hdu 1567 2006 (题意理解容易出错)

    #include<stdio.h>
    #include<vector>
    #include<algorithm>
    using namespace std;
    struct Node
    {
        int x,y;
    } p;
    bool cmp(Node a,Node b)
    {
        if(a.x<b.x)return true;
        if(a.x==b.x&&a.y<b.y)return true;
        return false;
    }
    vector<Node>ve;
    int main()
    {
        int n,m;
        int x,y,flag;
        int i,j;
        while(scanf("%d",&n)!=EOF)
        {
            flag=1;
            ve.clear();
            m=n;
            n=n*(n-1)/2;
            for(i=0; i<n; i++)
            {
                scanf("%d-%d",&x,&y);
                if(flag)
                {
                    if(x==y)
                    {
                        flag=0;
                    }
                    else if(x>y)
                    {
                        p.x=y;
                        p.y=x;
                        ve.push_back(p);
                    }
                    else
                    {
                        p.x=x;
                        p.y=y;
                        ve.push_back(p);
                    }
                }
    
            }
            if(flag)
            {
                int k=0;
                sort(ve.begin(),ve.end(),cmp);
                for(i=1; i<m; i++)
                {
                    if(flag)
                        for(j=i+1; j<=m; j++)
                        {
                            if(i!=ve[k].x||j!=ve[k].y)
                            {
                                flag=0;
                                break;
                            }
                            k++;
                        }
                    else break;
                }
            }
            if(flag)printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    View Code
    #include<iostream>
    #include<string.h>
    #include<cstdio>
    
    using namespace std;
    int flag[2010][2010];
    int main()
    {
    
        int i,j;
        int n,a,b;
    
        char str[20];
    
        while(scanf("%d",&n)!=EOF)
        {
    
            memset(flag,0,sizeof(flag));
            int tag=0;
    
            for(i=1;i<n;i++)
            {
                for(j=1;j<=n/2;j++)
                {
                    cin>>str;
                    sscanf(str,"%d-%d",&a,&b);
                    if(flag[a][b]==1||flag[b][a]==1||a==b)
                    {
                        tag=1;
                    }
                    flag[a][0]++;
                    flag[b][0]++;
                    flag[a][b]=1;
                    flag[b][a]=1;
                }
            }
            if(tag)
            printf("No
    ");
            else
            {
                int tag1=0;
                for(i=1;i<=n;i++)
                {
                    if(flag[i][0]!=n-1)
                    {
                        tag1=1;
                        printf("No
    ");
                        break;
                    }
                }
                if(!tag1)
                printf("Yes
    ");
            }
        }
        return 0;
    }
    View Code

    都WA了,疑惑不解啊!!!

    题意问题!!!!!!!??

    正确理解方式:

      每一行的输入是每只队伍比赛且仅比赛一次;

      所有输入的组合是赛事安排的所有可选解

    正解:

    #include<stdio.h>
    #include<string.h>
    int flag[2010][2010];
    int hang[2010];
    int main()
    {
    
        int i,j;
        int n,a,b;
    
        char str[20];
    
        while(scanf("%d",&n)!=EOF)
        {
    
            memset(flag,0,sizeof(flag));
            int tag=0;
    
            for(i=1;i<n;i++)
            {
                memset(hang,0,sizeof(hang));
                for(j=1;j<=n/2;j++)
                {
                    //cin>>str;
                    scanf("%d-%d",&a,&b);
                    if(flag[a][b]==1||flag[b][a]==1||a==b)
                    {
                        tag=1;
                    }
                    hang[a]++;
                    hang[b]++;
                    flag[a][0]++;
                    flag[b][0]++;
                    flag[a][b]=1;
                    flag[b][a]=1;
                }
                for(j=1;j<=n;j++)
                {
                    if(hang[j]!=1)
                    {
                        tag=1;
                        break;
                    }
                }
            }
            if(tag)
            printf("No
    ");
            else
            {
                int tag1=0;
                for(i=1;i<=n;i++)
                {
                    if(flag[i][0]!=n-1)
                    {
                        tag1=1;
                        printf("No
    ");
                        break;
                    }
                }
                if(!tag1)
                printf("Yes
    ");
            }
        }
        return 0;
    }
    #include<stdio.h>
    #include<string.h>
    #include<vector>
    #include<algorithm>
    using namespace std;
    struct Node
    {
        int x,y;
    } p;
    bool cmp(Node a,Node b)
    {
        if(a.x<b.x)return true;
        if(a.x==b.x&&a.y<b.y)return true;
        return false;
    }
    vector<Node>ve;
    int hang[2010];
    int main()
    {
        int n;
        int x,y,flag;
        int i,j;
        while(scanf("%d",&n)!=EOF)
        {
            flag=1;
            ve.clear();
            for(i=1; i<n; i++)
            {
                memset(hang,0,sizeof(hang));
                for(j=1; j<=n/2; j++)
                {
                    scanf("%d-%d",&x,&y);
                    hang[x]++;
                    hang[y]++;
                    if(flag)
                    {
                        if(x==y)
                        {
                            flag=0;
                        }
                        else if(x>y)
                        {
                            p.x=y;
                            p.y=x;
                            ve.push_back(p);
                        }
                        else
                        {
                            p.x=x;
                            p.y=y;
                            ve.push_back(p);
                        }
                    }
                }
                for(j=1;j<=n/2;j++)
                {
                    if(hang[j]!=1)
                    {
                        flag=0;
                        break;
                    }
                }
            }
            if(flag)
            {
                int k=0;
                sort(ve.begin(),ve.end(),cmp);
                for(i=1; i<n; i++)
                {
                    if(flag)
                        for(j=i+1; j<=n; j++)
                        {
                            if(i!=ve[k].x||j!=ve[k].y)
                            {
                                flag=0;
                                break;
                            }
                            k++;
                        }
                    else break;
                }
            }
            if(flag)printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    托管C++中System::String^ 转换为 char*
    Oracle-11:联合查询
    Oracle-10:分析函数
    Oracle-09:聚合函数
    Oracle-08:连接查询
    Oracle-07:别名,去重,子查询
    Oracle-06:DML语言数据表的操作
    Oracle-05:伪表dual
    Oracle-04:DDL语言数据表的操作
    Oracle-03:关系型数据库和非关系的数据库的各自优缺点与区别
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3349595.html
Copyright © 2011-2022 走看看