【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

所给的li,ri是左括号从左到右的顺序给的。
(且注意长度是2*n
现在我们先把第一个左括号放在第1个位置。

然后考虑第二个位置。

如果这个位置能放右括号和第一个匹配(位置满足在1+l[i]..1+r[i]之间.

那么我们就在第二个位置放一个右括号就好了。

(如果我们作死不放右括号的话,那就只能放左括号了->一定要放一个括号的

那么我们就只能先匹配这一个左括号了,而前一个左括号可能在第3个位置就不能匹配了。

这就会造成错解。

也就是说当前栈顶的左括号是当前需要匹配的括号。不能跳过它。那么我们的原则肯定就是赶快把它匹配了。

越拖到后面,就越没机会匹配。

(所以能和之前的某个括号匹配,就一直匹配

而如果这个位置不能匹配。

那么没办法。

只好放一个左括号在这个地方了。

然后优先匹配新加进去的这个左括号。

如果当前的位置已经大于上界了。

那么就直接输出无解。

如果还有没匹配到的左括号。

也输出无解。

【代码】

#include<bits/stdc++.h>
using namespace std; const int N = 600; int n,l[N+10],r[N+10],pos[N+10];
stack<int> sta;
vector<char> ans; int main()
{
cin >>n;
for (int i = 1;i <= n;i++){
cin >> l[i] >> r[i];
} int now = -1;
for (int i = 1;i <= n;i++){
sta.push(i);
pos[i] = ++now;
ans.push_back('(');
while (!sta.empty()){
int top = sta.top();
if (pos[top]+l[top]<=now+1 && now+1<=pos[top]+r[top]){
sta.pop();
ans.push_back(')');
++now;
}else if (now+1>pos[top]+r[top]){
return cout<<"IMPOSSIBLE"<<endl,0;
}else break;
}
}
if (!sta.empty()) return cout<<"IMPOSSIBLE"<<endl,0;
for (char key:ans)
cout<<key;
return 0;
}

【Henu ACM Round#20 F】 Arthur and Brackets的更多相关文章

  1. 【Henu ACM Round#15 F】Arthur and Questions

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] a1+a2+...+ak<a2+a3+...ak+1 ->a1<ak+1 a2+a3+...+ak+1<a3 ...

  2. 【Henu ACM Round#18 F】Arthur and Walls

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 考虑,为什么一个连通块里面的空格没有变成一个矩形? 如果不是形成矩形的话. 肯定是因为某个2x2的单张方形里面. 只有一个角是墙.其 ...

  3. 【Henu ACM Round#16 F】Om Nom and Necklace

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] KMP算法可以把"i前缀"pre[i] 分成ssssst的形式 这里t是s的前缀. 然后s其实就是pre[i]中 ...

  4. 【Henu ACM Round#17 F】Upgrading Array

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果我们对某一个位置i操作两次的话. 显然结果就和操作一次一样. 因为第一次操作过后1..i这些数字就变成是互质的了. gcd为1. ...

  5. 【Henu ACM Round#20 D】 Devu and Partitioning of the Array

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一开始所有的数字单独成一个集合. 然后用v[0]和v[1]记录集合的和为偶数和奇数的集合它们的根节点(并查集 然后先让v[0]的大小 ...

  6. 【Henu ACM Round #13 F】Fibonacci-ish

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举序列的头两个数字是什么 O(N^2) 然后头两个数字确定之后. f[3],f[4]..就确定了 只需查看f[3],f[4]..是 ...

  7. 【Henu ACM Round#20 E】Star

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 找规律. 1,13,37.... 6n(n-1) + 1 [代码] #include <bits/stdc++.h> # ...

  8. 【Henu ACM Round#20 C】 Eevee

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 处理处所有的字符串可能的样子. 存在map里面就好. [代码] #include <bits/stdc++.h> usi ...

  9. 【Henu ACM Round#20 B】Contest

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 根据时间和原分数. 算出对应的分数就可以了. [代码] #include <bits/stdc++.h> using n ...

随机推荐

  1. 005.JMS可靠性机制

    1. 消息接收确认 JMS消息只有在被确认之后,才认为已经被成功地消费了.消息的成功消费通常包含三个阶段: 客户接收消息 客户处理消息 消息被确认 在事务性会话中,当一个事务被提交的时候,确认自动发生 ...

  2. SPOJ 1029 Matrix Summation【 二维树状数组 】

    题意:二维树状数组,更改值的时候有一点不一样, 是将a[x][y]设置为一个值,所以add的时候要将它和以前的值作差一下 #include<iostream> #include<cs ...

  3. HDU 1241 Oil Deposits【DFS】

    解题思路:第一道DFS的题目--- 参看了紫书和网上的题解-- 在找到一块油田@的时候,往它的八个方向找,直到在能找到的范围内没有油田结束这次搜索 可以模拟一次DFS,比如说样例 在i=0,j=1时, ...

  4. 1、Windows服务器 VS Linux服务器

  5. dispatch_group_t踩过的坑

    如果想在dispatch_queue中所有的任务执行完成后在做某种操作,在串行队列中,可以把该操作放到最后一个任务执行完成后继续,但是在并行队列中怎么做呢.这就有dispatch_group 成组操作 ...

  6. Paper Reading: Relation Networks for Object Detection

    Relation Networks for Object Detection笔记  写在前面:关于这篇论文的背景知识,请参考我前面的两篇随笔(<关于目标检测>和<关于注意力机制> ...

  7. 【BZOJ1014】【JSOI2008】火星人prefix

    题意: Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 ...

  8. (2016北京集训十二)【xsy1542】疯狂求导

    题解: 这题看起来很难...但是实际上并没有想象中的那么难 第一眼看上去不会求导公式怎么办?不要紧,题目背景非常良心的给出了题目中的导数计算公式 求完导合并同类项很恶心怎么办?不要紧,样例解释说明了不 ...

  9. [HEOI2012]采花(树状数组+离线)

    听说这题的所发和HH的项链很像. 然而那道题我使用莫队写的... 这是一个套路,pre数组加升维(在线). 记录一个\(pre\)数组,\(pre[i]\)代表上一个和i颜色相同的下标. 我们把询问离 ...

  10. oracle仿全文检索切词机制实现文本信息类似度查找

    应用场景: 依据keyword查询与此keyword相似的信息,当中一些keyword要排除掉比如:"有限公司"."有限责任公司"."股份有限公司&q ...