90分求助
  • 板块P1246 编码
  • 楼主小渣青999
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/8/27 10:26
  • 上次更新2023/11/6 19:12:38
查看原帖
90分求助
170047
小渣青999楼主2020/8/27 10:26
#include<iostream>
#include<cstdio> 
#include<string>
using namespace std;
typedef long long int ll;
ll ans;
ll c[30][30];
void build()
{
	c[0][0]=0;c[0][1]=c[1][1]=1;
	for(int i=1;i<=26;i++) c[i][0]=1; 
	for(int i=1;i<=26;i++)
	    for(int j=1;j<=i;j++)
	    c[i][j]=c[i-1][j]+c[i-1][j-1];
}
int main()
{
	string s;
	cin>>s;
	int len=s.size();
	build();
	int now=0;// 0-a 
	for(int i=1;i<len;i++)
	{
		if(s[i]<=s[i-1])
		{
			printf("0");
			return 0;
		}
	}
	for(int i=1;i<len;i++) 	ans+=c[26][i];

	for(int i=0;i<len;i++)
	{
		if(s[i]==now+'a') 
		{
			now++;continue;
		}
		while(now+'a'<s[i])
		{
			int order=c[26-now-1][len-i-1];
			ans+=order;
			now++;//  
		}
		now++;
	}
	if(len>1) ans++;
	cout<<ans;

	return 0;
}

找不到问题,随便试了长度1-6的几个点结果都是正确的,感谢好心的大佬。

2020/8/27 10:26
加载中...