现在的位置: 首页 > 综合 > 正文

1006. Team Rankings

2019年11月10日 ⁄ 综合 ⁄ 共 1212字 ⁄ 字号 评论关闭

转 http://blog.csdn.net/ederick/article/details/7226807

http://www.w3c.com.cn/sicily-1006-team-rankings

这题虽然大概懂意思,但还是不太懂那些数字怎么来的。找些感觉不错的代码先mark

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    int n;
    int i, j, k;
    int min;
    string info;
    string ranking[ 120 ];

    string s = "ABCDE";
    ranking[ 0 ] = s;
    for ( i = 1; next_permutation( s.begin(), s.end() ); i++ )
        ranking[ i ] = s;

    while ( cin >> n && n ) {
        int value[ 120 ] = { }; 
        while ( n-- ) {
            cin >> info;
            for ( i = 0; i < 120; i++ ) {
                for ( j = 0; j < 5; j++ ) {
                    for ( k = j + 1; k < 5; k++ ) {
                        if ( info.find( ranking[ i ][ j ] ) > info.find( ranking[ i ][ k ] ) )
                            value[ i ]++;
                    }
                }
            }
        }

        min = 0;
        for ( i = 1; i < 120; i++ ) {
            if ( value[ min ] > value[ i ] )
                min = i;
        }
        cout << ranking[ min ] << " is the median ranking with value " << value[ min ] << ".\n";
    }

    return 0;

}                                 
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char const *argv[])
{
   int n,len = 5;
   string str[100];
   int pos[6];
   while(cin >> n,n)
     {
      string ans;
      for(int i = 0; i < n; i++)
        cin >> str[i];
      char next[] = "ABCDE";
      int min = 10000;
      do
       {
        for(int i = 0; i < len; i++)
          pos[next[i]-'A'] = i;
        int value = 0;
        for (int i = 0; i < n; ++i)
        {
          for(int j = 0; j < len; j++)
            for(int k = j+1; k < len; k++)
              if(pos[str[i][j] - 'A'] > pos[str[i][k] - 'A'])
                value++;
        }
        if(value < min)
        {
          min = value;
          ans = next;
        }
       }while(next_permutation(next,next+5));
      cout << ans << " is the median ranking with value " << min << "." << endl;
     }
  return 0;
}                                 

抱歉!评论已关闭.