poj 1850-code解题报告
利用组合数学的一道题,对于一个序列先找长度比这个序列短的序列个数,再找长度相同的序列的个数
View Code
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int c[30][30]; 6 char s[15]; 7 int main() 8 { 9 int i,len,j,code; 10 c[0][0]=1; 11 for(i=1;i<=26;i++) 12 for(j=0;j<=i;j++) 13 c[i][j]=j?c[i-1][j-1]+c[i-1][j]:1; 14 scanf("%s",s); 15 len=strlen(s); 16 for(i=0;i<len-1;i++)//注意这里要直接结束 17 { 18 if(s[i]>=s[i+1]) 19 { 20 printf("0\n"); 21 return 0; 22 } 23 } 24 code=1; 25 for(i=1;i<len;i++) 26 code+=c[26][i]; 27 for(i=0;i<len;i++) 28 { 29 char t=i?s[i-1]+1:'a'; 30 for(;t<=s[i]-1;t++) 31 code+=c['z'-t][len-1-i]; 32 } 33 printf("%d\n",code); 34 return 0; 35 }