UOJ 31 [UR #2]猪猪侠再战括号序列
2016-09-15 14:46
232 查看
模拟
orz居然有大神用splay搞出来
下面的()括号表示题目中的左括号和右括号,挑战阅读能力
我的做法:记(值为1,)值为-1,从左到右不断累加。如果前i个括号是合法的括号序列,即累加值为0且累加值不出现负值,就直接不管前i个。对于每一个不合法的括号序列一定是以)为开头,此时累加值为-1,从这个位置向右不断累加,直到累加值为0,把这之间全部翻转就一定能形成合法序列。
orz居然有大神用splay搞出来
下面的()括号表示题目中的左括号和右括号,挑战阅读能力
我的做法:记(值为1,)值为-1,从左到右不断累加。如果前i个括号是合法的括号序列,即累加值为0且累加值不出现负值,就直接不管前i个。对于每一个不合法的括号序列一定是以)为开头,此时累加值为-1,从这个位置向右不断累加,直到累加值为0,把这之间全部翻转就一定能形成合法序列。
#include<cstdio> #include<cstring> using namespace std; char s[200005]; int ans[200005][2], pre[200005]; int main() { scanf("%s",s); int n = strlen(s)-1, m=0; for(int i = 0; i <= n; i++) pre[i] = s[i] == '(' ? 1 : -1; int pos=0, sum=0; while(pos<=n) { sum+=pre[pos]; if(sum<0) { int temp=sum, des; for(des = pos+1; temp; des++) temp+=pre[des]; ans[++m][0]=pos+1; ans[m][1]=des; pos=des-1; sum=0; } pos++; } printf("%d\n",m); for(int i = 1; i <= m; i++) printf("%d %d\n",ans[i][0],ans[i][1]); }
相关文章推荐
- 【UOJ】【UR #2】猪猪侠再战括号序列(splay/贪心)
- UOJ #31 【UR #2】猪猪侠再战括号序列
- uoj #31. 【UR #2】猪猪侠再战括号序列 贪心
- uoj problem 31 猪猪侠再战括号序列
- UOJ #31. 【UR #2】猪猪侠再战括号序列
- UOJ#31 【UR #2】猪猪侠再战括号序列
- 【区间dp】括号序列再战猪猪侠
- 【bzoj4350】括号序列再战猪猪侠 区间DP
- BZOJ4350: 括号序列再战猪猪侠
- Bzoj4350 括号序列再战猪猪侠
- [区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
- UVa 1626 括号序列——区间DP
- 1141 DP 括号序列
- 网易2018校园招聘:最长公共子括号序列 [python]
- 括号序列
- 51Nod-1476-括号序列的最小代价
- uva 1626 括号序列
- [LintCode] 有效的括号序列
- 【递归】输出给定的n对括号对的所有合法序列