试了五次的AC题解

麦睿生  •  3个月前


#include<bits/stdc++.h>
using namespace std;
string s1;
int now=1;
void input_data()
{
	cin>>s1;
	int ll=s1.size();
	ll--;
	for(int i=0;i<=ll-1;i++)
	{
		if(s1[i]>s1[i+1])
		{
			printf("0");
			exit(0);
		}
		if(s1[i]<'a'||s1[i]>'z')
		{
			printf("0");
			exit(0);
		}
	}
}
void get_ans()
{
	string s2="a";
	while(s2!=s1)
	{
		int l=s2.size();
		l--;
		if(s2[l]<'z')
		{
			s2[l]++;
			now++;
		}
		else
		{
			bool bo=true;
			for(int i=l-1;i>=0;i--)
				if(s2[i]!=(s2[i+1]-1))
				{
					bo=false;
					break;
				}
			if(bo)
			{
				l++;
				s2+='a';
				for(int i=0;i<=l;i++)
					s2[i]='a'+i;
				now++;
			}
			else
			{
				int temp=l-1;
				while(s2[temp]==s2[temp+1]-1)
				{
					temp--;
				}
				s2[temp]++;
				for(int i=temp+1;i<=l;i++)
				{
					s2[i]=s2[i-1]+1;
				}
				now++;
			}
		}
	}
}
void output_ans()
{
	printf("%d",now);
}
int main()
{
	input_data();
	get_ans();
	output_ans();
	return 0;
}

评论: