POJ1496 – Word Index

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<algorithm>
using namespace std;
char s[30];
int yanghui[33][33];///  记录杨辉三角
int combination(int a,int b){///  组合数
return yanghui[a][b];
}
void run(){
int length=strlen(s+1);///  从s[1]开始测量长度
int ans=0;
for(int i=1;i<length;i++){
    ans+=combination(26,i);
}///                       小数位的都算完
///    如abc    那么就把一位和两位的都算出来
ans+=1;///    加上自身的序号
for(int i=1;s[i]!='\0';i++){
if(s[i]-s[i-1]==1){///  如果串上的书是连续的  不处理
        continue;
        }
for(int k=1;s[i-1]+k!=s[i];k++){///对中间跳过去的都算出来  再加进去
    ans+=combination('z'-(s[i-1]+k),length-i);
}

}
cout<<ans<<endl;
}
int main(){
yanghui[1][0]=1;
yanghui[1][1]=1;
for(int i=2;i<=33;i++){
    for(int j=0;j<=i;j++){
        if(j==0)yanghui[i][j]=1;
        else yanghui[i][j]=yanghui[i-1][j]+yanghui[i-1][j-1];
    }
}
while(scanf("%s",s+1)!=EOF){
s[0]='a'-1;///   让s[0]为'a'-1为了一会儿容易处理
int no=0;
for(int i=1;s[i]!='\0';i++){
    if(s[i-1]>s[i]){cout<<0<<endl;
    no=1;
    break;
    }
}
if(no){
    continue;
}
run();
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40675883/article/details/82918070