D. Cloud of Hashtags(逆向贪心)

这题正着来做很麻烦

, , 这么想,删掉后缀后,字符串的字典序只减不增

, n 所以,第n个字符串一定不会删后缀

n 1 , n 那么检查第n-1个后缀,删掉一些让它小于等于第n个字符串

. . . . . . . . . 以此类推.........

#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
string s[maxn];
int n;
void run(int q,int w)
{
	//保证s[q]>=s[w]
	//因为s[q]应该比较大,所以是去删掉s[w]的一些后缀 
	if(s[q]>=s[w])	return;//字典序大于等于,满足条件了 
	int len1=s[w].length(),len2=s[q].length();
	for(int i=0;i<len1;i++)
	if(s[w][i]>s[q][i])
	{
		s[w].erase(i,len1-i);
		return;
	}
}
int main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i=1;i<=n;i++)	cin >> s[i];
	for(int i=n;i>=2;i--)	run(i,i-1); 
	for(int i=1;i<=n;i++)	cout<<s[i]<<"\n";
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107250707
今日推荐