• HDU1914(稳定婚姻)


    http://acm.hdu.edu.cn/showproblem.php?pid=1914

    思路:Gale-Shapley算法。算法过程是男士不停地求婚,女士不停地拒绝。在每一轮中,每个尚未订婚的男士在他还没有求过婚的女士中选一个自己最喜欢的求婚(不管她有没有订婚)。然后每个女士在向她求婚的人之中选择她最喜欢的一个订婚,并且拒绝其他人。注意,这些向她求婚的人中包含她的未婚夫,因此她可以选择另一个自己更喜欢的人订婚,而抛弃自己的现任未婚夫。这个算法的结果是使男士都能娶到自己有可能娶到的最好的妻子,所以是对男士的理想配对。
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    using namespace std;
    struct male
    {
        int f,rev[41],tag;
    } m[41];
    struct female
    {
        int tag,temp,val,wait[41];
    } f[41];
    int _,n,t,k,mf[41][41],fm[41][41];
    char ch[41];
    bool ok()
    {
        int i;
        for (i=1;i<=26;i++)
            if (m[i].f==0&&m[i].tag>0) return true;
        return false;
    }
    int main()
    {
        scanf("%d",&_);
        while (_--)
        {
            scanf("%d",&n);
            int i,j;
            for (i=1;i<=26;i++)
            {
                f[i].tag=0;
                m[i].tag=0;
            }
            for (i=1;i<=n;i++)
            {
                scanf("%s",ch);
                t=ch[0]-'a'+1;
                m[t].f=0;
                m[t].tag=t;
                memset(m[t].rev,0,sizeof(m[t].rev));
            }
            for (i=1;i<=n;i++)
            {
                scanf("%s",ch);
                t=ch[0]-'A'+1;
                f[t].tag=t;
                f[t].temp=0;
                f[t].val=30;
                memset(f[t].wait,0,sizeof(f[i].wait));
            }
            for (i=1;i<=n;i++)
            {
                scanf("%s",ch);
                t=ch[0]-'a'+1;
                for (j=2;j<=n+1;j++)
                    mf[t][j-1]=ch[j]-'A'+1;
            }
            for (i=1;i<=n;i++)
            {
                //cout<<1;
                scanf("%s",ch);
                t=ch[0]-'A'+1;
                for (j=2;j<=n+1;j++)
                    fm[t][j-1]=ch[j]-'a'+1;
            }
            //cout<<"hhhhhhh"<<endl;
            while (ok())
            {
                for (i=1;i<=26;i++)
                {
                    if (m[i].f==0&&m[i].tag>0)
                    {
                        for (j=1;j<=n;j++)
                        {
                            t=mf[i][j];
                            if (m[i].rev[t]==0)
                            {
                                m[i].rev[t]=1;
                                m[i].f=1;
                                k=++f[t].wait[0];
                                f[t].wait[k]=i;
                                break;
                            }
                        }
                    }
                }
                for (i=1;i<=26;i++)
                {
                    if (f[i].tag>0)
                    {
                        for (j=1;j<=f[i].wait[0];j++)
                        {
                            t=f[i].wait[j];
                            for (k=1;k<=n;k++)
                                if (fm[i][k]==t) break;
                            if (f[i].val>k)
                            {
                                m[f[i].temp].f=0;
                                f[i].temp=t;
                                f[i].val=k;
                            }
                            else m[t].f=0;
                        }
                        f[i].wait[0]=0;
                    }
                }
            }
            int out[41];
            memset(out,0,sizeof(out));
            for (i=1;i<=26;i++)
                if (f[i].tag>0)
                {
                    j=f[i].temp;
                    out[j]=i;
                }
            for (i=1;i<=26;i++)
                if (out[i]) printf("%c %c
    ",i-1+'a',out[i]-1+'A');
            if (_) printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    [Quote] Android Graphics Architecture
    New NFC log
    [Quote] 3.6 Namespaces
    NFC DAL(Driver Abstraction Layer) and OSAL(Operating System Abstraction Layer)
    Finance&Invest&Economics URL Links
    Concepts
    Tracking NFC Flow
    NFC log
    [IoE] About AllJoyn™
    [Quote] How does getSystemService() work exactly?
  • 原文地址:https://www.cnblogs.com/hnqw1214/p/6347672.html
Copyright © 2020-2023  润新知