POJ 2038

暴力+模拟=水

#include<cstdio>

#include<cstring>

#include<algorithm>

using namespace std;

int tot[50];

int main()

{

    int n;

    while(scanf("%d",&n)&&n)

    {

        memset(tot,0,sizeof(tot));

        char s[10];

        for(int i=0;i<n;i++)

        {

            scanf("%s",s);

            for(int j=0;j<5;j++)

                for(int k=j+1;k<5;k++)

                    tot[(s[j]-'A')*10+s[k]-'A']++;

        }

        char ans[]={"ABCDE"},temp[]={"ABCDE"};

        int val=0;

        for(int i=0;i<5;i++)

            for(int j=i+1;j<5;j++)

                val+=n-tot[(ans[i]-'A')*10+ans[j]-'A'];

        while(next_permutation(temp,temp+5))

        {

            int tp=0;

            for(int i=0;i<5;i++)

                for(int j=i+1;j<5;j++)

                    tp+=n-tot[(temp[i]-'A')*10+temp[j]-'A'];

            if(tp<val)

            {

                val=tp;

                strcpy(ans,temp);

            }

        }

        printf("%s is the median ranking with value %d.\n",ans,val);

    }

    return 0;

}

  

你可能感兴趣的:(poj)