转 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; }