poj 1850 Code 1496 Word Index
这个题是组合题:

#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<set> #include<map> #include<cstring> #include<vector> #include<string> #define LL long long using namespace std; void Init( int c[][27] ) { for( int i = 0 ; i < 27; i ++ ) for( int j = 0 ; j <= i ; j ++ ) { if( j == 0 || i == j ) c[i][j] = 1; else c[i][j] = c[i-1][j-1] + c[i-1][j]; } c[0][0] = 0; } int main( ) { int c[27][27]; char str[12]; Init( c ); while( scanf( "%s",str )==1 ) { int len = strlen( str ),flag = 0; for( int i = 1; i < len ; i ++ ) { if( str[i] < str[i-1] ) { flag = 1; puts( "0" ); return 0; } } int sum = 0; for( int i = 1 ; i < len ; i ++ ) sum += c[26][i]; for( int i = 0 ; i < len ; i++ ) { char s = i==0?'a':str[i-1] + 1; while( s < str[i] ) { sum += c['z'-s][len-i-1]; s++; } } printf( "%d\n",++sum ); } //system( "pause" ); return 0; }