poj1850 Code

来源:互联网 发布:淘宝能买到恐怖水琴吗 编辑:程序博客网 时间:2024/06/05 14:30

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

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

#include<cstdio>#include<cstring>#define MAX 100#define ll long longchar 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;}


0 0