pku 1850 前面一直没注意到某个不规范的情况,导致结果一直比标准的大...调了好久...

//数论题,,,,这个做法是正向加求和算的,当然应该也可以反向求出不符合规定的数目,然后减去
#include <iostream>
using namespace std;
__int64 tt(int x,int y)
{
__int64 sum=1;
int i,j;
for(i=0,j=1;i<y;i++)
{
   sum*=(x-i);
   for(;j<=y&&sum%j==0;j++) sum/=j;
}
return sum;
}
int main()
{
string s;
__int64 n;
int i,j;
while(cin>>s)
{
    for(i=0;s[i+1];i++)
    {
     if(s[i]>=s[i+1]) break;
    }
    if(s[i+1]) cout<<0<<endl;
    else
    {
     i=s.length();
     for(--i,n=0;i;i--)
      n+=tt(26,i);
     for(i=0;s[i];i++)
     {
      if(i==0)j='a';
      else j=s[i-1]+1;
      for(;j<s[i];j++)
      {
       n+=tt('z'-j,s.length()-i-1);
      }
     }
     cout<<n+1<<endl;
    }
}
return 0;
}

posted on 2007-10-03 19:58  xmx  阅读(410)  评论(0)    收藏  举报

导航