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

【题意】

在这里输入题意

【题解】

所给的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. Codeforces 988F. Rain and Umbrellas

    解题思路:动态规划 遍历点i,如果从前一个点i-1走到这个点i不需要伞,则疲劳值不变dp[i] = dp[i-1]. 如果前一个点i-1走到这一个点i需要伞,则从前面找一把伞. 即遍历前面的每个点j, ...

  2. 乌班图 之 设置镜像服务器 、设置屏幕分辨率QAQ

    设置镜像服务器 Ubuntu 中的大部分软件安装都是用apt命令,从Ubuntu的服务器上直接安装的. 但是国外你懂的网速是硬伤,因此要搞个镜像服务器,内容当然都是一样的咯. 第一步:进入系统设置 第 ...

  3. php获取当前月份的前(后)几个月

    //获取当前月份的前一月 function GetMonth($sign) { //得到系统的年月 $tmp_date=date("Ym"); //切割出年份 $tmp_year= ...

  4. thread.h

    https://github.com/wookayin/pintos/blob/master/src/threads/thread.h #ifndef THREADS_THREAD_H   #defi ...

  5. 在javascript中对于this指向的再次理解

    总所周知,function () {}函数体内的this对象指向的是调用该函数的对象,那么我们看一下这个例子 <script> var length = 3; function fn () ...

  6. PuTTY登录交换机后Backspace键不能删除

    使用PuTTY登录后,发现如果键入字符有误,不能使用键盘上Backspace键删除.查看PuTTY终端(Terminal)键盘(Keyboard)设置,修改上述两项设置如下(红框所示):即“The B ...

  7. 路飞学城Python-Day10

    [37.函数-命名空间]命名空间又称为name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量 x = 1,存放于内存中,那名字x存放在哪里呢?名称空间正式存放名字x和1绑定关 ...

  8. JWT的初步了解以及session、cookie机制

    1.什么是状态保持? 想要了解JWT,首先需要知道什么是状态保持,举一个例子来说:无论是在web上还是在手机app上,我们都可以以游客的身份访问,此时都会有登录/注册字眼,当我们登录之后,就会是我们的 ...

  9. jQuery第三课 点击按钮 弹出层div效果

    jQuery 事件方法 事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件. 触发实例: $("button#demo").click() 上面的例子将触发 id= ...

  10. django 开发之自定义日志器(二)

    2016-08-24 需求 在我们的真实环境中当我们出现错误的时候我们要记录下来,便于我们分析差错. 关于日志的代码文件 # 自定义日志输出信息 LOGGING = { 'version': 1, ' ...