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