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;
}
#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;
}
浙公网安备 33010602011771号