codeforces 508 E. Arthur and Brackets

题目链接:

http://codeforces.ru/problemset/problem/508/E

题意:

有n对括号,按顺序,给出每对括号长度的范围,输出一种情况。

限制:

1 <= n <= 600

思路:

贪心:能匹配的先匹配。

括号匹配问题,果断先思考用栈能不能做。

C++ Code


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54


/*codeforces 508 E. Arthur and Brackets

题意:

有n对括号,按顺序,给出每对括号长度的范围,输出一种情况。

限制:

1 <= n <= 600

思路:

贪心:能匹配的先匹配。

括号匹配问题,果断先思考用栈能不能做。

*/

#include<iostream>

#include<cstdio>

using namespace std;

const int N = 605;

int stk[N], top;

char ans[2 * N];

int len = 0;

int pos[N], l[N], r[N];

int main()

{

int n;

int flag = 1;

scanf("%d", &n);

for(int i = 0; i < n; ++i)

{

scanf("%d%d", &l[i], &r[i]);

if(flag == 0) continue;

stk[++top] = i;

pos[i] = len;

ans[len++] = ‘(‘;

while(top > 0 && pos[stk[top]] + l[stk[top]] <= len)

{

if(pos[stk[top]] + r[stk[top]] < len)

{

flag = 0;

break;

}

else

{

ans[len++] = ‘)‘;

--top;

}

}

}

if(flag && top == 0)

{

puts(ans);

}

else

{

puts("IMPOSSIBLE");

}

return 0;

}

时间: 2024-12-13 06:01:33

codeforces 508 E. Arthur and Brackets的相关文章

codeforces 508 D. Tanya and Password (fleury算法)

codeforces 508 D. Tanya and Password (fleury算法) 题目链接: http://codeforces.ru/problemset/problem/508/D 题意: 给出n个长度为3的字符串,如:abc bca aab 如果一个字符串的长度为2的后缀等于,另外一个字符串的长度为2的前缀,则这两个字符串能连起来,比如:aabca,然后这n个字符串可以形成一个图,求图上的一条欧拉通路. 限制: 1 <= n <= 2*10^5,字符串里面有大写字母,小写字

codeforces 525 D Arthur and Walls

题意: 给出一个n*m的表格,里面有'*'和'.',求把最少的'*'移除掉,使得'.'所在的连通块是矩形. 限制: 1 <= n,m <= 2000 思路: 2*2地考虑,如果2*2的格子里只有一个'*',说明这个'*'要去掉,其他情况都不用去掉.然后去掉这个'*'后,又会对其他四个格子有影响. 复杂度好难估计. /*codeforces 525 D Arthur and Walls 题意: 给出一个n*m的表格,里面有'*'和'.',求把最少的'*'移除掉,使得'.'所在的连通块是矩形. 限

codeforces 629C Famil Door and Brackets (dp + 枚举)

题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串,长度为n,问p,q的取值数目. 解题思路: 枚举p的长度,可以直接得到q的长度.因为要满足在任意位置'(' 数目大于 ’)‘ 的数目,所以统计一下s串中 ’(‘ - ')' 的最小数目minx.dp[i][j] 代表 到位置 i 时,满足 '(' - ')' == j 的情况数目.然后枚举p的 j

Codeforces 508E Arthur and Brackets

题意: 给出括号序列中每个右括号可能离对应左括号多远  求这个括号序列 思路: 记忆化搜索解决  用f[l][r]表示对于第l个左括号到第r个左括号区间最前面的左括号与其对应右括号的距离 状态只有n^2个  不用担心TLE 求f[l][r]的方法为  如果最前的左括号可以包住l+1~r个括号就尝试包起来  否则将l~r分治为l~x和x+1~r两个子问题 代码: #include<cstdio> #include<iostream> #include<cstring> #

codeforces 552 E Vanya and Brackets

题意是这样,给出一个运算符只有+跟*,数字都在1到9之间的算式,要你加入一对括号,使得算式的结果尽可能的大,保证最多十五个乘号. 很显然,若要让加入的括号能够影响原本运算的结果,必然是要影响乘法,那么加入的这对括号中必然至少有一个跟乘号是相邻的,恰好乘号的数目很小,那么直接枚举括号的位置即可,每次算出当前解更新ans即可. #include<map> #include<string> #include<cstring> #include<cstdio> #i

CodeForces 525D D. Arthur and Walls(BFS)

题目链接:http://codeforces.com/problemset/problem/525/D 题意:n*m的格子,'*'代表墙壁,'.'代表房间,要求房间都必须是矩形,输出改动后的 n*m: 思路:看了官方题解,思路蛮巧妙的.因为要求一定是矩形,所有在每个2*2的格子里,若有3个'.'和1个'*',那么就将'*'改成'.',这样就能确保房间一定是矩形了. 代码如下: #include<cstdio> #include<cstring> #include<iostre

CodeForces 149D 区间DP Coloring Brackets

染色有三个条件: 对于每个点来说要么不染色,要么染红色,要么染蓝色 对于每对配对的括号来说,有且只有一个一边的括号被染色 相邻的括号不能染成相同的颜色 首先可以根据给出的括号序列计算出括号的配对情况,具体来说就是第i个括号与R[i]个括号配对. 对于一个正规配对括号序列(correct bracket sequence),d(l, r, c1, c2)表示括号序列S[i]~S[j],i左边括号的颜色是c1,r右边的括号颜色是c2(0表示没有染色),这样的序列的染色方法数. 与S[i]配对的可能是

CodeForces 629C Famil Door and Brackets

DP.听了同学的讲解才会的. 具体做法:dp[i][j]表示长度为 i 的括号串,前缀和(左括号表示1,右括号表示-1)为 j 的有几种. 状态转移很容易得到:dp[i][j]=dp[i - 1][j + 1]+dp[i - 1][j - 1],表示 i 这位分别放上右括号和左括号. 然后就是要处理题目的问题了: 我们可以枚举P串的长度和P串的前缀和,来看这种情况下是否符合题目要求,如果符合答案增加. 那么如何判断P串长度为left,前缀和为p的情况下,有几种符合题目要求呢? 先对已经存在的那个

Arthur and Brackets

n<605设计出n对夸号  给出n个条件每个条件为[l,r] 表示第i对夸号右夸号离左夸号的距离,然后夸号的右夸号出现的顺序必须按照给的顺序 出现, 那么如果存在就输出否则输出impossilbe , 我们知道如果一个夸号在 L位置,那么 另一个夸号就在 L+cnt 这个位置, 那么我们就可以知道在L=1 和L+cnt-1 这之间的夸号只要合法就可以了 #include <iostream> #include <cstdio> #include<algorithm>