Code--POJ 1850

1、题目类型:组合数学。

2、解题思路:模拟后发现题意为组合数学的简单题。

3、注意事项:求排列组合函数C()的定义,C()中 (n-m)<m?(n-m):m 将大大提高运算效率

4、实现方法:

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

int Arr[ 11 ];

int C( int n, int m)
{
int r = 1 ;
int h = (n - m) < m ? (n - m):m;
for ( int i = 1 ;i <= h;i ++ )
{
r
*= n;
r
/= i;
n
-- ;
}
return r;
}

void SetTable()
{
for ( int i = 1 ;i <= 10 ;i ++ )
Arr[i]
= C( 26 ,i);
}

int main()
{
char str[ 11 ];
string s,s1;
__int64 ans
= 0 ;
SetTable();
cin
>> str;
s
= s1 = str;
sort(s.begin(),s.end());
if (s != s1)
{
cout
<< 0 << endl;
return 0 ;
}
int len = strlen(str);
for ( int i = len - 1 ;i >= 1 ;i -- )
ans
+= Arr[i];
for ( int t = ' a ' ;t < str[ 0 ];t ++ )
ans
+= C( ' z ' - t,len - 1 );
for ( int j = 1 ;j < len;j ++ )
for ( int k = str[j - 1 ] + 1 ;k < str[j];k ++ )
ans
+= C( ' z ' - k,len - j - 1 );
printf(
" %I64d\n " ,ans + 1 );
return 0 ;
}

 

你可能感兴趣的:(code)