带括号的方程300道300+7带括号的方程300道*带括号的方程300道300-7带括号的方程300道

BZOJ4350: 括号序列再战猪猪侠
时间: 19:48:20
&&&& 阅读:152
&&&& 评论:
&&&& 收藏:0
标签:Description
括号序列与猪猪侠又大战了起来。
众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号
序列S合法,当且仅当:
1.( )是一个合法的括号序列。
2.若A是合法的括号序列,则(A)是合法的括号序列。
3.若A,B是合法的括号序列,则AB是合法的括号序列。
我们考虑match[i]表示从左往右数第i个左括号所对应的是第几个右
括号,现在他得到了一个长度为2n的括号序列,给了你m个信息,第i
个信息形如ai,bi,表示match[ai]&match[bi],要你还原这个序列。
但是你发现这个猪猪侠告诉你的信息,可能有多个括号序列合法;甚
至有可能告诉你一个不存在合法括号序列的信息!
你最近学了取模运算,你想知道答案对*17*2^23+1)取
模的结果,这个模数是一个质数。
第一行一个正整数T,T& = 5,表示数据组数。
对于每组数据,第一行一个n,m,n表示有几个左括号,m表示信息数。
接下来m行,每行两个数ai,bi,1& = ai,bi& = n。
对于每组数据,输出一个数表示答案。
Sample Input
Sample Output
&对于前两个点,是卡特兰数的情况。
对于第三个点,合法的情况只可能是 ()()()。
对于第四个点,合法情况可能是 (()()) 或者 (())()
对于第五个点,由于拓扑关系形成了环,显然无解。
对于 100% 的数据,保证 n & = 300
设f[l][r]表示第l个括号到第r个括号的匹配方案。
考虑l的右括号应在哪里,有两种转移:
1.(.....)型:若区间[l+1,r]中没有任何一条诸如match[i]&match[l]的条件,则f[l][r]=f[l+1][r]。
2.(...)...型:枚举分割位置p,类似判断条件,转移为f[l][r]+=f[l+1][p]*f[p+1][r]。
为了O(1)完成判断,我们其实是在询问一个矩形内有没有点,用前缀和判判即可。
#include&cstdio&
#include&cctype&
#include&queue&
#include&cmath&
#include&bitset&
#include&cstring&
#include&algorithm&
#define rep(i,s,t) for(int i=s;i&=t;i++)
#define dwn(i,s,t) for(int i=s;i&=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace
inline int read() {
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
return x*f;
typedef long long
const int maxn=310;
const int mod=;
int f[maxn][maxn],A[maxn][maxn];
int check(int x1,int x2,int y1,int y2) {
return A[x2][y2]-A[x1-1][y2]-A[x2][y1-1]+A[x1-1][y1-1];
int dp(int l,int r) {
int& ans=f[l][r];
if(ans&=0) return
if(l&=r) return ans=1;ans=0;
if(!check(l+1,r,l,l)) ans=dp(l+1,r);
rep(i,l,r-1) if(!check(l+1,i,l,l)&&!check(l,l,i+1,r)&&!check(l+1,i,i+1,r)) {
(ans+=((ll)dp(l+1,i)*dp(i+1,r))%mod)%=
int main() {
dwn(T,read(),1) {
memset(f,-1,sizeof(f));
memset(A,0,sizeof(A));
int n=read(),m=read();
while(m--) {
int a=read(),b=read();
A[b][a]=1;if(a==b) f[1][n]=0;
rep(i,1,n) rep(j,1,n) A[i][j]+=A[i][j-1]+A[i-1][j]-A[i-1][j-1];
printf("%d\n",dp(1,n));
标签:原文地址:http://www.cnblogs.com/wzj-is-a-juruo/p/5089768.html
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!问题补充&&
本页链接:
比如:#define
CONFIG_REG_MAP_NR
300+201当它出现在以下语句中时;你预期的结果是 2 * 501,是 501这多此一举的做法,加上括号可以保你想要的值是作为一个整体的,所以,表达式: 501 和 表达式由于括号不改变表达式的值:int a = 2,原因是加括号可以改变优先级顺序: (501)的旨一样:2* 300 + 201.所以, 但实际是;int b = a * CONFIG_REG_MAP_NR,对于你的问题,只有一个数,不加括号也不会有影响,而不是被任何可能的优先级顺序打乱。当然
热心网友 &
•••••••••••
b?a。所以你的这个宏#define CONFIG_REG_MAP_NR (501)给501加括号举个例子,b)
(a&gt,b) 可以知道括号里面的是这个宏的参数:b)这个宏是输出a和b中较大的数。那么你看这个 max(a:#define max(a
zhenimei100&
这个用求平方1.#define x_2
x*x;与2. #define x_2 ((x)*(x))原理一样。当1.。当是x=1+2时 有x_2=1+2*1+2=5;当2。当是x=1+2时有 x_2=(1+2)*(1+2)=9;你看效果不一样了吧……
liuhudaos&
猜你感兴趣& & & & & & & & & & & & & & & & & & & & & &柱爷的恋爱
Time Limit: MS (Java/Others) &&& Memory Limit: KB (Java/Others)
http://acm.uestc.edu.cn/#/contest/show/96
Description
她手里有刚刚收到从远方的括号序列(仅包含( ) [ ]的序列),然而序列已经是一团乱麻,不堪入目,柱爷看到她坐在位子掩面哭泣,便上前安慰一番,她向柱爷提出自己的"无理"申请.
她"蛮横"地要求柱爷计算出:删去这个括号序列的一个子集(不可以把整个括号序列都删去,那可是她的心爱之物;可以不完全删;子集可能是不连续的;子集可能为&),使得这个括号序列合法的方案数.
这个方案数可能很大,所以她只要求柱爷计算出这个方案数%就好了(她心疼柱爷,不想让柱爷打高精度).
你能帮柱爷解决这个恋爱中的小小问题吗?
第一行一个整数NN,表示括号序列的长度
接下来一行包含一个长度为NN的括号序列字符串
1&N&3001&N&300
一个正整数,表示柱爷要回答她的数.
Sample input and output
Sample InputSample Output
合法的括号序列定义如下:
如果S是合法序列,那(S)和[S]也是合法序列;
如果A和B都是合法序列,那么AB也是合法序列.
例如,下面的字符串都是合法序列:
(), [], (()), ([]), ()[], ()[()]
&给你一个字符序列,对他进行删除操作,可以不删,但不能全删,问最后得到合法序列的删除方法数
区间dp,定义dp[l][r]为处理完[l,r]区间后得到的合法序列的个数,考虑转移方程,可由两个状态转移而来:
1.删除第l个括号,则此时dp[l][r]=dp[l+1][r]
2.不删除第l个括号,则需要在后面枚举与其配对的括号,将两个区间分别操作,将结果相乘即可。
注意不要爆int了。。。
#include&iostream&
#include&cstdio&
#include&cstring&
#include&string&
using namespace
const int maxn=300+7;
const int mod=;
long long int dp[maxn][maxn];
bool match(int l,int r)
//匹配括号
if((s[l]=='('&&s[r]==')')||(s[l]=='['&&s[r]==']'))
return true;
return false;
long long int dfs(int l,int r)
if(~dp[l][r]) return dp[l][r];
long long int &ans=dp[l][r]=0;
if(l&r) return ans=1;
if(l==r) return ans=1;
ans=dfs(l+1,r);
//删除括号
for(int i=l;i&=r;i++){
//枚举配对
if(match(l,i)){
ans+=dfs(l+1,i-1)*dfs(i+1,r);
return ans%
int main()
scanf("%d",&n);
memset(dp,-1,sizeof(dp));
long long int ans=(dfs(0,n-1)-1)%
printf("%lld",ans);
阅读(...) 评论()当前位置: >
在下面的括号里填上“>”、“<”或“=”号.43+85+25> 100+43
(45+55)×8> 45×8+55570厘米= 5.70米
70千克> 0.7千克.
43+85+25>100+43;45+55)×8>45×8+55;5.70米=570厘米;70千克>0.7千克;故答案为:>,>,=,>.
在下面的括号里填上“>”、“<”或“=”号. 43+85+25 >
(45+55)×8 >
45×8+55 570厘米 =
0.7千克. ...
试题地址 : http://www.xueersi.com/xue/shiti/3023198.html
★ 这道试题主要考察你对知识点""的考点理解, 关于知识点解析请查看
在横线里填上合适的分数.
在横线里填上“>”“<”或“=”符号3时< 300分
5吨200千克= 5200千克99厘米< 1米
2分米5厘米> 200毫米.
在横线里填上“>”、“<”或“=”42-6> 42÷6
150分< 3时
8000米> 7千米
300毫米= 3分米
9999克> 1千克
470×0< 470+0.
在横线里填上合适的数.2小时=120 分
120秒=2 分
3米=300 厘米
10千米=10000 米
6吨=6000 千克
3吨450千克=3450 千克.
2米-50厘米=150 厘米.
5分=300 秒  
3时=180 分 
 6000米+4000米=10 千米60分米=6 米
4厘米=40 毫米
 1吨-800千克=200 千克.
2.5时=150 分
800克=0.8 吨120平方分米=1.2 平方米
2小时40分=
热门试题推荐

我要回帖

更多关于 iphone7 通讯录有括号 的文章

 

随机推荐