栈
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
Modern Art 2 (栈)
Modern Art 2 (栈) 题意:给定目标颜色序列,每次操作可选若干不相交区间进行涂色,后涂的区间可以被之前涂的区间覆盖,每种颜色在整个过程中只能涂一次,不必涂完所有颜色,求最小操作次数。 思路:类似括号序列问题,因为每种颜色只能用一次,考虑将每种颜色的左右边界当作一个括号,显然最优的思路是最外层的括号最先被涂,然后再涂内层括号,所以需要用到栈来进行维护括号序列,若存在不满足条件的括号序列直接输出-1结束,ep:1212→(1(2)1)2ep: 1212\rightarrow (_1(_2)_1)原创 2020-11-13 23:22:46 · 325 阅读 · 0 评论 -
POJ3259-Tautology(栈)
POJ3259-Tautology(栈) 题意: 给定一个命题公式,判断该式子是否为永真式. 因为最多只有555个变量,所以一共323232种情况, 然后可以从后往前处理表达式的真值,所有情况都返回真就是真,否则就是假. #include<iostream> #include<string> #include<cstdio> #include<stack> using namespace std; int a[32][5]; int main(){ ios原创 2020-10-20 23:13:25 · 215 阅读 · 0 评论 -
Shuffle Card(栈)
Shuffle Card(栈) 思路:栈,先进后出,然后用一个visvisvis数组维护出现过的次数即可。 for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=n;i;i--){ s.push(a[i]); } for(int i=1;i<=m;i++){ scanf("%d",&x);s.push(x); } while(!s.empty()){ x=s.top();s.pop(); if(原创 2020-09-15 22:04:37 · 426 阅读 · 0 评论 -
HDU.6759 Leading Robots(单调栈)
HDU.6759Leading Robots(单调栈) 思路:单调栈。 考虑:对机器人进行排序,按照加速度从小到大,加速相同,位置从小到大排序,保证后面下标的机器人能超过前面下标的机器人或者位置相同。 然后我们前往后开始遍历,如果当前机器人比栈顶机器人初始位置大,说明该机器人始终在栈顶的机器人前面, 即栈顶的机器人不可能是第一,所以弹出栈顶,若当前栈中有至少两个机器人,我们则需比较a,b,ia,b,ia,b,i,b,ab,ab,a分别为栈顶的元素,栈顶的前一个元素。 若机器人iii超过bbb的时间小于等于b原创 2020-07-24 12:20:08 · 510 阅读 · 0 评论 -
LC.32. 最长有效括号
LC.32. 最长有效括号 传送门 挺好的一个题,这里主要再分析一下官方的解法。 思路: 1.dpdpdp。 令以下标iii结尾的字符串的最大长度为dp[i]dp[i]dp[i],显然s[i]=′(′s[i]='('s[i]=′(′,dp[i]=0dp[i]=0dp[i]=0. 当s[i]=′)′s[i]=')'s[i]=′)′,需要讨论两种情况。 1:1:1: s[i−1]=′(′s[i-1]='('s[i−1]=′(′ ,这样显然有dp[i]=dp[i−2]+2dp[i]=dp[i-2]+2dp[i]=原创 2020-07-04 08:50:58 · 285 阅读 · 0 评论 -
LC.42.接雨水
LC.42.接雨水 传送门 方法好多,学习到了。 1.对每个柱子向左向右暴力枚举最大柱子,然后取较小的作为贡献。时间复杂度O(n2)O(n^2)O(n2),会TLETLETLE 2.由1可以想到,预处理一下向左,向右的最大值,即预处理前缀最大值,和后缀最大值即可。时间复杂度:O(n)O(n)O(n) class Solution { public: int trap(vector<int>& h) { if(h.empty()) return 0;原创 2020-06-16 09:17:20 · 371 阅读 · 0 评论 -
Arithmetic Problems(后缀表达式)
Arithmetic Problems(后缀表达式) 传送门 思路:后缀表达式裸题,只不过换了下运算符的意义。栈或者数组模拟栈都可以。注意用cincincin跳过空格就行了。 栈模拟: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5; #define mst(a) memset(a,0,sizeof a) int main(){ double n; char c;原创 2020-06-04 15:00:47 · 505 阅读 · 0 评论 -
D.表达式求值 (栈&后缀表达式)
D.表达式求值 (栈&后缀表达式) 题目传送门 思路:裸题,唯一需要注意的是会爆long,long 要一边取模一边操作。 AC代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e4; int main(){ stack<ll>s; ...原创 2020-04-23 18:08:49 · 343 阅读 · 0 评论