码迷,mamicode.com
首页 > 其他好文 > 详细

1321C - Remove Adjacent(贪心简略证明)

时间:2020-05-10 11:08:47      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:color   return   str   最大   题目   mat   names   ++   for   

\(\colorbox{Orange}{贪心策略:每次挑选字典序最大的删除.}\)

\(那为什么呢?\)

\(回顾一下题目,当且仅当有比自己小1的字母在附近才能把自己删去\)

\(\color{Red}{字典序最大的字母永远不会作为其他字母的辅助字母删去其他字母}\)

\(比如当前最大字典序字母是d,因为d只能协助e,没有e,d就是废物\)

\(d在中间,只会阻挡两边的字母相互消去,所以删去d\)

#include <bits/stdc++.h>
using namespace std;
int n;
string s;
bool sovle()
{
	for(int i=25;i>=0;i--)
	{
		char w=char(i+‘a‘);
		for(int j=0;j<s.length();j++)
		{
			if(s[j]!=w)	continue;
			if(j!=0&&s[j-1]==w-1)
			{
				s.erase(j,1);
				return true;	
			}			
			if(j!=s.length()-1&&s[j+1]==w-1)
			{
				s.erase(j,1);
				return true;
			}
		}
	}
	return false;
}
int main()
{
	int ans=0;
	cin>>n>>s;
	//先从最大的开始消灭起 
	while(sovle())	ans++;
	cout<<ans;
}

1321C - Remove Adjacent(贪心简略证明)

标签:color   return   str   最大   题目   mat   names   ++   for   

原文地址:https://www.cnblogs.com/iss-ue/p/12862327.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!