还不算是难题(嘿嘿,因为我做出来了)
很简单,找到相应的方程式解就是了(中间也犯了一个很2的错误,把9+10+11+...+99写成(1+90)*90/2,改过来后就好了)
不多说,code is below
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int combi(int a,int b) { int sum=1; int j=1; for(int i=a;i>=a-b+1;i--) { sum*=i; while(j<=b&&sum%j==0) { sum/=j; j++; } } return sum; } int main() { #ifndef ONLINE_JUDGE freopen("/home/test/samplein","r",stdin); freopen("/home/test/sampleout","w",stdout); #endif char words[1111]; scanf("%s",words); int len=strlen(words); for(int i=0;i<len-1;i++) { if(words[i]>=words[i+1]) { printf("0\n"); return 0; } } int sum=0; for(int i=1;i<len;i++) { sum+=combi(26,i); } for(int i=0;i<len;i++) { int j; if(i==0) j='a'; else j=words[i-1]+1; for(;j<words[i];j++) { sum+=combi('z'-j,len-i-1); } } printf("%d\n",sum+1); return 0; }
POJ1850 Code 【排列组合】
时间: 2024-10-16 06:12:07