Codeforces Global Round 9 C. Element Extermination (思维,栈)

Posted lr599909928

tags:

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

技术图片

  • 题意:有一个长度(n)的序列,如果(a_{i}<a_{i+1}),那么可以选择删除(a_{i})或者(a_{i+1}),再继续操作,问是否能够将序列删到只剩一个元素.

  • 题解:感觉这种序列变化的题目能用stack写,所以用数组模拟stack写了一发.

    ? 首先,假如栈为空或者(a_{i}<a_{i-1}),那么就让(a_{i})入栈.

    ? 否则,如果栈中元素只有1个,那么我们不用做任何操作,若不止1个,让当前元素入栈,循环判断,如果栈中元素个数>2,那么我们删除小的(即(a_{i-1}),因为要确保删除后大的要比前面的大,这样才能继续删),而如果元素个数=2,那么我们删除大的(因为要确保前面的这个小的要比后面的大的数小),最后看栈中元素个数是否为1即可.

  • 代码:

    int t;
    int n;
    int x;
    int stk[N];
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
      	cin>>t; 
      	 while(t--){
      	 	cin>>n;
      	 	int cnt=0;
      	 	 for(int i=1;i<=n;++i){
      	 	 	cin>>x;
      	 	 	if(cnt==0) stk[++cnt]=x;
      	 	 	else if(stk[cnt]<x){
      	 	 		if(cnt!=1){
      	 	 			stk[++cnt]=x;
      	 	 			while(stk[cnt]>stk[cnt-1]){
      	 	 				if(cnt==2) cnt--;
      	 	 				else if(cnt>2){
      	 	 					int tmp=stk[cnt];
      	 	 					stk[--cnt]=tmp;
      	 	 				}  
      	 	 				else if(cnt==1) break;
      	 	 			}
      	 	 		}
      	 	 	}
      	 	 	else stk[++cnt]=x;
      	 	 }
      	 	 if(cnt==1) cout<<"YES"<<endl;
      	 	 else cout<<"NO"<<endl; 	 
      	 }
    
        return 0;
    }
    

以上是关于Codeforces Global Round 9 C. Element Extermination (思维,栈)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Global Round 9 C.Element Extermination(思维)

Codeforces Global Round 9 DReplace by MEX

Codeforces Global Round 9 C. Element Extermination (思维,栈)

Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)

Codeforces Global Round 1 做题记录

Codeforces Global Round 8 A. C+=(贪心)