本文主要是介绍POJ 1850 Code 统计问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:存在下面的编码方式:
a - 1
b - 2
...
z - 26
ab - 27
...
az - 51
bc - 52
...
vwxyz - 83681
其中字符串的长度逐渐增加,并且每一个字符串的字符只能是升序。例如b不能排在a的前面。
#include<cstdio>
#include<cstring>
using namespace std;
#define lint __int64
lint C ( int m, int n )
{
if ( m < n ) return 0;
if ( m == n || n == 0 ) return 1;
lint sum = 1;
for ( int i = 1, j = m; i <= n; i++, j-- )
sum = sum * j / i;
return sum;
}
int main()
{
char str[20];
scanf("%s",str);
int i, j;
for ( i = 1; str[i]; i++ )
if ( str[i] < str[i-1] )
{
printf("0\n"); return 0;
}
int len = strlen(str);
lint ret = 0;
for ( i = 1; i < len; i++ )
ret += C(26,i);
for ( i = 'a'; i < str[0]; i++ )
ret += C('z'-i,len-1);
for ( i = 1; i < len; i++ )
for ( j = str[i-1]+1; j < str[i]; j++ )
ret += C('z'-j,len-i-1);
printf("%I64d\n",ret+1);
return 0;
}
这篇关于POJ 1850 Code 统计问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!