Codeforces Global Round 9 C. Element Extermination (思维,栈)
2024-09-08 06:14:22
题意:有一个长度\(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;
}
最新文章
- redis配置文件redis.conf中文版(基于2.4)
- Error: Cannot find a valid baseurl for repo: base
- PHP实现文字水印图片
- Educational Codeforces Round 7 - E. Ants in Leaves
- 使用subst创建虚拟磁盘及设置分区卷标
- svn 1.8.11 命令行提交新添加文件错误
- poj2409
- mysql函数操作(3)
- leetcode 编辑距离
- 拿到阿里,网易游戏,腾讯,smartx的offer的过程 (转)
- [.Net Tools] 超強大的封裝工具 Advanced Installer
- 蓝桥杯-打印十字图-java
- [Swift]LeetCode937. 重新排列日志文件 | Reorder Log Files
- Java 控制语句:循环、条件判断
- 微信小程序 - 弹出层组件
- sql 判断 数据库 表 字段 是否存在
- 最大团 HDU-1530
- PHP qrcode 生成二维码
- MVC模式在Java Web应用程序中的实例分析
- Spring简洁版总结