poj 1850&&1496

来源:互联网 发布:淘宝虚假交易处罚 编辑:程序博客网 时间:2024/06/02 13:36

题意:用字符串的表示数,字符串符合字典序递增(这个条件就是为了出题而出,要不就太easy) 解法:组合数,借用网上的解法.

         求组合数->递推关系式        C[i][j]=C[i-1][j-1]+C[i-1][j]
  1. /************************************************************************* 
  2.     > File Name: poj1496.cpp 
  3.     > Author: cy 
  4.     > Mail: 1002@qq.com  
  5.     > Created Time: 14/11/12 15:37:45 
  6.  ************************************************************************/ 
  7.  
  8. #include<iostream> 
  9. #include<cstring> 
  10. #include <algorithm> 
  11. #include<cstdlib> 
  12. #include<vector> 
  13. #include<cmath> 
  14. #include<stdlib.h> 
  15. #include<iomanip> 
  16. #include<list> 
  17. #include<deque> 
  18. #include<map> 
  19. #include <stdio.h> 
  20. #include <queue> 
  21.  
  22. const int maxn=100+5
  23.  
  24. #define inf 0x3f3f3f3f 
  25.   #define INF 0x3FFFFFFFFFFFFFFFLL 
  26. #define rep(i,n) for(i=0;i<n;i++) 
  27.  #define reP(i,n) for(i=1;i<=n;i++) 
  28.  
  29. #define ull unsigned long long 
  30.  #define ll long long 
  31.  
  32. #define cle(a) memset(a,0,sizeof(a)) 
  33.  
  34. using namespace std; 
  35. int C[maxn][maxn]; 
  36. void init() 
  37.     int i,j; 
  38.     rep(i,27
  39.     { 
  40.         rep(j,i+1
  41.         { 
  42.             if(j==0||i==j) 
  43.             { 
  44.                 C[i][j]=1
  45.             } 
  46.             else
  47.                 C[i][j]=C[i-1][j-1]+C[i-1][j]; 
  48.             } 
  49.         } 
  50.     } 
  51. char str[maxn]; 
  52. int len; 
  53. bool getbool() 
  54.     len=strlen(str); 
  55.     int i,j; 
  56.     rep(i,len){ 
  57.         for(j=i+1;j<len;j++) 
  58.         { 
  59.             if(str[j]<=str[i])return false
  60.         } 
  61.     } 
  62.     return true
  63. int main() 
  64. #ifndef ONLINE_JUDGE 
  65.      freopen("in.txt","r",stdin); 
  66.      //freopen("out.txt","w",stdout); 
  67. #endif 
  68. /*    ll sum=0; 
  69.     for(ll i=1;i<=1000000000000000LL;i+=2) 
  70.     { 
  71.         sum++; 
  72.     } 
  73.     cout<<sum<<endl;*/ 
  74.     init(); 
  75.     while(cin>>str) 
  76.     { 
  77.         int i,j,k; 
  78.         bool flag=getbool(); 
  79.         if(!flag){ 
  80.             cout<<0<<endl; 
  81.             continue
  82.         } 
  83.         int sum=0
  84.         for(i=1;i<len;i++) 
  85.         { 
  86.             sum+=C[26][i]; 
  87.         } 
  88.         char temp; 
  89.         for(i=0;i<len;i++) 
  90.         { 
  91.             if(i==0){ 
  92.                 temp='a'; 
  93.             } 
  94.             else
  95.                 temp=str[i-1]+1
  96.             } 
  97.             while(temp<=str[i]-1
  98.             { 
  99.                 sum+=C['z'-temp][len-i-1]; 
  100.                 temp++; 
  101.             } 
  102.         } 
  103.         cout<<sum+1<<endl; 
  104.     } 
  105.     return 0
  106. }
0 0
原创粉丝点击