当前位置: 首页 > news >正文

第二周 题目练习2(stack综合 单调栈)牛客 14326. 14666. 15029

栈版子

Rails

栈模拟模板题,核心思路是模拟真实的入栈、出栈过程

#include<bits/stdc++.h> #define ll long long #define endl '\n' #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); #define ull unsigned long long #define fi first #define se second #define YES cout<<"YES"<<endl; #define NO cout<<"NO"<<endl; using namespace std; ll n; int main() { IOS while(cin>>n&&n!=0) { ll x; while(cin>>x) { if(x==0)break; vector<ll>goal; goal.push_back(x); for(ll i=1;i<n;i++) { cin>>x; goal.push_back(x); } stack<ll>st; ll num=1; bool ok=true; for(ll a:goal) { while(st.empty()||st.top()!=a) { st.push(num); num++; if(num>n+1) { ok=false; break; } } if(!ok)break; st.pop(); } if(ok)cout<<"Yes"<<endl; else cout<<"No"<<endl; } cout<<endl; } // cout<<fixed<<setprecision(x)<< ; return 0; }

最优屏障

给定一排山峰,两座山可以相互看见当且仅当它们中间没有更高或等高的山。在某两座山之间放置屏障,会切断所有跨越该位置的可视山峰对。

要求:找到切断可视对最多的屏障位置;若多个位置答案相同,输出编号最小的位置。

解题过程

1.核心思想:贡献法 + 单调栈 + 差分

直接暴力枚举所有山峰对会超时。

因此枚举每一对可见山峰,给对应的屏障区间统计贡献。

对于任意一对可见山峰 (l, r):

屏障放在 [l, r-1] 任意位置,都能切断这一对。

等价于:对区间 [l, r-1]整体 +1。

2.差分优化区间修改

一维差分可以 O(1) 完成区间加:

区间 [L,R] +1:d[L]++, d[R+1]–

本题代入:L=l,R=r-1,得到固定写法:

d[l]++, d[r]–

3.单调栈找所有可见山峰对

维护一个单调递减栈存储山峰下标:

遍历当前山峰 r,弹出所有左侧更矮的山 l:两者可见,统计贡献

栈不为空时,剩余栈顶高山也与 r 可见,统计贡献但不弹出(后续继续使用)

当前山峰入栈,维持单调性

4.前缀和求答案

对差分数组做前缀和,得到每个屏障位置切断的总对数,遍历维护最大值、最小下标即可

注:题目屏障下标从第 1、2 座山之间开始,代码统计下标偏移,所以最终输出需要 ansx+1

代码实现

#include<bits/stdc++.h> #define ll long long #define endl '\n' // #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); #define ull unsigned long long #define fi first #define se second #define YES cout<<"YES"<<endl; #define NO cout<<"NO"<<endl; using namespace std; ll t; ll n; ll ansx,now,maxless; int main() { scanf("%lld",&t); for(ll cas=1;cas<=t;cas++) { scanf("%lld",&n); vector<ll>h(n+2); vector<ll>d(n+2,0); for(ll i=1;i<=n;i++) { scanf("%lld",&h[i]); } stack<ll>st; for(ll r=1;r<=n;r++) { while(!st.empty()&&h[st.top()]<h[r]) { ll l=st.top(); st.pop(); //可视对(l,r) ,等价于[l,r-1]+1; d[l]+=1; d[r]-=1; } if(!st.empty()) { ll l=st.top(); d[l]++; d[r]--; } st.push(r); } now=0; maxless=-1; ansx=1; for(ll i=1;i<=n;i++) { now+=d[i]; if(now>maxless||(now==maxless&&i<ansx)) { maxless=now; ansx=i; } } printf("Case #%lld: %lld %lld\n",cas,ansx+1,maxless); } // cout<<fixed<<setprecision(x)<< ; return 0; }

吐泡泡

解题过程

栈实时 化简:遍历字符串,逐个字符入栈;
每入栈一个字符,循环检查栈顶两个元素,满足合并 / 抵消规则则立即处理,直至无法匹配。
结果顺序处理:栈结构先进后出,取出栈内字符会得到逆序字符串,最后反转字符串得到正确顺序输出;

代码实现

#include<bits/stdc++.h> #define ll long long #define endl '\n' #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); #define ull unsigned long long #define fi first #define se second #define YES cout<<"YES"<<endl; #define NO cout<<"NO"<<endl; using namespace std; ll t; string s; string ans; int main() { IOS cin>>t; while(t--) { cin>>s; ll l=s.size(); stack<char>st; for(char c:s) { st.push(c); while(st.size()>=2) { char top1=st.top(); st.pop(); char top2=st.top(); if(top1=='o'&&top2=='o') { st.pop(); st.push('O'); } else if(top1=='O'&&top2=='O') { st.pop(); } else { st.push(top1); break; } } } ans=""; while(!st.empty()) { ans+=st.top(); st.pop(); } reverse(ans.begin(),ans.end()); cout<<ans<<endl; } // cout<<fixed<<setprecision(x)<< ; return 0; }
http://www.jsqmd.com/news/1289817/

相关文章:

  • 2026教育行业招生增效优选:AI搜索优化服务商精选解析与合作避坑指南 - 商业大观
  • EventBus事件模型详解:id、topic、data与可选属性的最佳配置
  • 毕业救命神器✨Paperxie一站式论文工具|写论文再也不用熬夜内耗啦!
  • 提示词拆解失败率高达82%?分步骤执行的7个原子级动作,资深Prompt工程师私藏清单
  • 3分钟解锁Windows新玩法:用APK Installer直接运行Android应用
  • 2026上海日本语言学校申请机构排名优选推荐 - 谁都没有我好看
  • 亚太地区全球名义雇主服务的出海新机遇
  • FFTformer-GoPro-fp32常见问题解答:解决你的部署、性能与精度困惑
  • 嗜神经性病毒RABV
  • 快速上手PoseEstimation-CoreML:零基础实现手机端姿态检测
  • 2026 武汉专升本正规机构大盘点!靠谱备考优先选武汉初阳教育专升本 - Luckyone王
  • Tanker SDK-js未来路线图:即将发布的5大令人期待的新功能
  • ubantu 24.04.4离线安装k3s
  • PhotoRec数据恢复工具:开源免费的硬盘数据拯救专家
  • 3分钟免费解锁鸣潮120帧:WaveTools工具箱完整使用指南
  • AC自动机 学习笔记
  • 拯救消失的网页记忆:Wayback Machine浏览器扩展完全指南
  • 为什么需要人在回路?达尔文.skill独特的三层守关机制详解
  • 如何快速部署MetaTube插件:Jellyfin智能元数据刮削终极指南
  • 芯聆CLD6255(4 x 190W, 2 x 380W 或 2.1 模式 (2x190W + 1x380W ) @1% THD 数字输入 D 类音频播放器)
  • 命令行生成BIN文件并修改内容后与固件合并烧录至芯片
  • 软件测试工程师到底是做什么的?一文讲清职责、技能与成长路径
  • 揭秘XStreaming背后的WebRTC技术:打造稳定流畅的串流体验
  • 为什么说地震后的机房评估,必须把“深度除尘检测”作为前置必选项?
  • Apicurio Registry审计日志:跟踪Schema变更历史的终极指南
  • 中小企业财税数字化怎么选?业财税一体化软件推荐与亿企赢深度解析 - 速递信息
  • 【AI生成产品展示图终极指南】:20年电商视觉专家亲授,3步搞定高转化率AI图,错过再等半年!
  • KMS智能激活工具完整指南:一键永久激活Windows和Office的免费解决方案
  • Jenkins备份与恢复策略:确保你的构建历史永不丢失
  • 电销机器人为什么越来越多的初创团队选择蓝鲸智呼? - 生活动态圈