• hdu 4068 福州赛区网络赛H 排列 ***


    拍的太慢了,很不满意

    排完序之后,枚举自己和对手状态,若被击败,则再枚举自己下一个策略,直到可以击败对手所有的策略

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<map>
    using namespace std;
    #define MOD 1000000007
    const int INF=0x3f3f3f3f;
    const double eps=1e-5;
    typedef long long ll;
    #define cl(a) memset(a,0,sizeof(a))
    #define ts printf("*****
    ");
    const int MAXN=1005;
    int n,m,tt;
    int g[15][15];
    int a1[15]={0,1,2,3,4,5,6};
    int a2[15]={0,1,2,3,4,5,6};
    bool check()
    {
        int t1=0;
        int t2=0;
        bool flag=0;
        while(1)
        {
            if(g[a2[t2]][a1[t1]])
            {
                t1++;
            }
            else t2++;
            if(t1==n)
            {
                flag=0;
                break;
            }
            if(t2==n)
            {
                flag=1;
                break;
            }
        }
        if(!flag)    return 0;
        else return 1;
    }
    int main()
    {
        int i,j,k,ca=1;
        #ifndef ONLINE_JUDGE
        freopen("1.in","r",stdin);
        #endif
        scanf("%d",&tt);
        while(tt--)
        {
            printf("Case %d: ",ca++);
            map<string,int> mp1;
            map<int,string> mp2;
            scanf("%d",&n);
            string s[15];
            for(i=0;i<n;i++)
            {
                cin>>s[i];
            }
            sort(s,s+n);
            for(i=0;i<n;i++)
            {
                mp1[s[i]]=i;
                mp2[i]=s[i];
            }
            cl(g);
            string sw;
            for(i=0;i<n;i++)
            {
                int num;
                scanf("%d",&num);
                for(j=0;j<num;j++)
                {
                    cin>>sw;
                    int v=mp1[sw];
                    g[i][v]=1;  //有克制关系
                }
            }
            for(i=0;i<15;i++)    a1[i]=i,a2[i]=i;
            bool flag=1;
            bool w=0;
            while(1)
            {
                flag=1;
                while(1)
                {
                    if(!check())    //该策略被击败
                    {
                        flag=0;
                    }
                    if(!next_permutation(a2,a2+n))  break;
                }
                if(flag)
                {
                    w=1;
                    break;
                }
                if(!next_permutation(a1,a1+n))  break;
            }
            if(w)
            {
                printf("Yes
    ");
                cout<<mp2[a1[0]];
                for(i=1;i<n;i++)
                {
                    cout<<" "<<mp2[a1[i]];
                }
                printf("
    ");
            }
            else
            {
                printf("No
    ");
            }
        }
    }
  • 相关阅读:
    大叔程序员的第六天 @布局&eclipse配置文件
    20130305Android自定义Button按钮显示样式
    solr学习(1)
    Lucence3.0学习(1)
    Liskov Substitution Principle (LSP) OO设计的里氏替换原则
    对于高内聚低耦合的理解
    ASP.NET 网站中的共享代码文件夹
    二探String类型
    初探String类型
    版本控制初探1
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4721626.html
Copyright © 2020-2023  润新知