您的位置:首页 > 其它

poj1850-CODE-组合

2016-01-29 11:17 369 查看
求出给定序列的序号。有一个定理需要知道



具体看这篇博客吧/article/1968930.html

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

char str[20];
int ans=0,C[26][26];

void init(void)
{
for(int i=0;i<=26;i++)
for(int j=0;j<=i;j++)
if(!j || i==j)
C[i][j]=1;
else
C[i][j]=C[i-1][j-1]+C[i-1][j];
C[0][0]=0;
return;
}

int main()
{
init();
while(~scanf("%s",str))
{
int len = strlen(str);
char oc = str[0],nc = str[0];
int ok = 1;
ans=0;
for(int i=1;i<len;i++)
{
nc = str[i];
if(nc <= oc)
{
printf("0\n");
ok = 0;
break;
}
}
if(!ok) continue;

for(int i=1;i<len;i++)
ans += C[26][i];

for(int i=0;i<len;i++)
{
char ch = i?str[i-1]+1:'a';
while(ch < str[i])
{
ans += C['z'-ch][len-1-i];
ch++;
}
}
printf("%d\n",ans+1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: