poj1850 Code
2014-11-07 23:19
253 查看
此题题意比较简单,是一个简单的数学题。题目中先定义了一个字典,然后给你个字符串,询问该字符串咋字典中的位置。如果不在字典中,输出0。
思路:预处理出长度为i,以第j个字母开头的字符串有多少在字典中。然后分析给定的字符串,求结果。代码如下:
思路:预处理出长度为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; }
相关文章推荐
- poj 1850 Code
- POJ 1850 Code
- POJ1850 Code(组合+康托展开)
- (Relax 数论1.25)POJ 1850 Code(求某个字符串在字典中的位置)
- POJ 1850 Code
- [POJ 1850] Code
- poj 1850 code
- POJ 1850 Code
- POJ 1496 Word Index || POJ 1850 Code
- POJ-1850-Code-组合数学
- poj1850--Code(组合篇2)
- poj 1850 Code
- POJ 1850 Code
- POJ1850-Code 递推数学
- POJ 1850 Code
- POJ - 1850 Code 组合数
- Code(POJ--1850
- poj 1850 Code
- poj 1850 Code
- POJ 1850 Code