C. Element Extermination1400 / 思维 贪心 结论

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C. Element Extermination1400 / 思维 贪心 结论相关的知识,希望对你有一定的参考价值。


https://codeforces.com/problemset/problem/1375/C
详细题解
方法一:用栈来模拟,贪心的删除。

  • 如果栈为空那么直接入栈
  • 如果栈顶元素大于等于a[i],即不满足删除的条件,那么也直接入栈
  • 满足条件了,贪心的删除
    • 栈内此时只有一个元素,故直接跳过,不用入栈
    • 栈内有多个元素,那么入栈分类的讨论。
      • 取栈顶的两个元素,如果此时不满足删除条件了,那么直接重新入栈归位,退出循环
      • 如果经过删除后的栈,栈内只剩一个了那么也退出。
      • 取栈顶的两个元素,如果此时满足删除条件了,那么分类讨论

        如果b左侧还有数,那么删b存a。a比b大,这样有更大的可能性比b前面的也大。
        如果b左侧没元素,那么删除a.存b,这样b有尽可能的比a后面的数都小
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*3+10;
int a[N],n;
int main(void) 
{
	int t; cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=1;i<=n;i++) cin>>a[i];
		stack<int>st;
		for(int i=1;i<=n;i++)
		{
			if(st.size()==0) st.push(a[i]);
			else if(a[i]<st.top()) st.push(a[i]);
			else 
			{
				if(st.size()==1) continue;
				st.push(a[i]);
				while(1)
				{
					auto a=st.top(); st.pop();
					auto b=st.top(); st.pop();
					if(a>b)
					{
						if(st.size()) st.push(a);
						else st.push(b);
					}
					else 
					{
						st.push(b),st.push(a);
						break;
					}
					if(st.size()==1) break;
				}
			}
		}
		if(st.size()==1) puts("YES");
		else puts("NO");
	}
	return 0;
}

结论: 你会发现最开始的一直没有删除,最后面的也一直存在
故只需看开头和结尾, 如果s1<sn 则YES 否则 NO

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*3+10;
int a[N],n;
int main(void) 
{
	int t; cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=1;i<=n;i++) cin>>a[i];
		if(a[1]<a[n]) puts("YES");
		else puts("NO");
	}
	return 0;
}

以上是关于C. Element Extermination1400 / 思维 贪心 结论的主要内容,如果未能解决你的问题,请参考以下文章

CSS学习(十七)-盒模型

20191002

目标 C. 这个 UIButton 图像有啥问题?

C. Equal Frequencies

C. Sequence Master

sh 取终端基因C. elegans