您的位置:首页 > 其它

poj1850 Code

2014-11-07 23:19 253 查看
此题题意比较简单,是一个简单的数学题。题目中先定义了一个字典,然后给你个字符串,询问该字符串咋字典中的位置。如果不在字典中,输出0。

思路:预处理出长度为i,以第j个字母开头的字符串有多少在字典中。然后分析给定的字符串,求结果。代码如下:

#include<cstdio>
#include<cstring>
#define MAX 100
#define ll long long

char s[MAX];

ll d[MAX][30],a[MAX];

int main(){

memset(d,0,sizeof(d));
memset(a,0,sizeof(a));
for (int i = 0; i<26; i++){
d[1][i] = 1;
a[1] += d[1][i];
}
for (int i = 2; i<=10; i++){
for (int j = 0; j<=26-i; j++){
for (int k = j+1; k<26; k++)
d[i][j] += d[i-1][k];
a[i] += d[i][j];
}
}

while (scanf("%s",s) != EOF){
int len = strlen(s);
int ok = 1;
for (int i = 1; i<len; i++) if (s[i] <= s[i-1]) ok = 0;
if (!ok){
printf("0\n");
continue;
}
ll sum = 0;
for (int i = 1; i<len; i++) sum += a[i];
for (int i = 0; i<len; i++){
if (i == 0){
for (int j = 0; j<s[i]-'a'; j++) sum += d[len][j];
}
else{
for (int j = s[i-1]-'a'+1; j<s[i]-'a'; j++)
sum += d[len-i][j];
}
}
printf("%lld\n",sum + 1);
}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: