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

【题意】

在这里输入题意

【题解】

所给的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. (转载)Android引导界面实现

    Android引导界面实现 Android   2014-07-10 14:47:36 发布 您的评价:       4.0   收藏     3收藏 ViewPager类提供了多界面切换的新效果,是 ...

  2. pthread_join/pthread_exit的用法解析

    官方说法: 函数pthread_join用来等待一个线程的结束.函数原型为: extern int pthread_join __P ((pthread_t __th, void **__thread ...

  3. NOIp模拟赛三十一

    持续降智 分数:100+0+0=100 C题subtask是假的,根本没有部分分中的情况...还我20分QAQ A:[BZOJ4444]国旗计划 B:[agc006f]blackout C:[arc0 ...

  4. 实战medusa暴力破解

     medusa介绍: 暴力破解工具:主要可以破解这些模块功能很强大 medusa  的安装 条件: 准备工作:(下载下面软件)   1 wget http://www.foofus.net/jmk/t ...

  5. vsftpd服务程序的三种认证模式

    vsftpd服务程序的三种认证模式的配置方法——匿名开放模式.本地用户模式以及虚拟用户模式.了解PAM可插拔认证模块的原理.作用以及实战配置方法,通过实战课程进一步继续学习SELinux服务的配置方法 ...

  6. Hadoop的datanode超时时间设置

    datanode进程死亡或者网络故障造成datanode无法与namenode通信, namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长. HDFS默认的超时时长为10 ...

  7. 2015 Multi-University Training Contest 1 y sequence

    Y sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. HttpClient 图讲解明

    大家刚看这个名字一定会想问这是什么东东,在这我特意百度百科了下 HTTP 协议可能是如今 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序须要直接通过 HTTP 协议来訪 ...

  9. Cocos2dx 小技巧(十五)话说ScrollView的delegate实现过程

    附:本文參加了CSDN博客大赛.亲假设认为这篇文章不错,就大胆的来投上一票吧! !!http://vote.blog.csdn.net/Article/Details? articleid=34140 ...

  10. ios xcode真机调试获取屏幕截屏

    非常多时候我们须要在调试的过程中把手机屏幕截图发给其它人看,在android开发中我们能够非常方便的截图保存.而xcode开发ios的时候发现这个需求却如此困难.网上大部分都是介绍的以下这个方案.可是 ...