cf314E. Sereja and Squares(dp)
题意
给你一个擦去了部分左括号和全部右括号的括号序列,括号有25种,用除x之外的小写字母a~z表示。求有多少种合法的括号序列。答案对4294967296取模。
合法序列不能相交,如()[],([])是合法序列,而([)]是不合法的。
Sol
这个题告诉我们什么叫:暴力艹标算,n方过百万。。。
首先当左括号确定之后,右括号的摆放顺序是确定的。
假设左括号只有一种
设$f[i][j]$表示前$i$个位置放了$j$个右括号
转移的时候分两种情况讨论
若该位置为$?$
放左括号的方案为$f[i - 1][j]$
放右括号的方案为$f[i - 1][j - 1]$
由于到第$i$个位置,最多有$i/2$个右括号。
当然还有一个下界$i - \frac{n}{2}$。
上界和下界都是为了保证序列合法
trick:对$2^{32}$取模相当于unsigned int 自然溢出
等等。。这题是个假题吧。。。。。
如果序列全都是????????
我算的最坏复杂度是$O(\frac{n^2}{8} + \frac{n^2}{16})$.......
#include<bits/stdc++.h>
#define ui unsigned int
using namespace std;
const int MAXN = 1e5 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, cnt;
ui f[MAXN];
char s[MAXN];
int main() {
N = read();
if(N & ) return puts(""), ;
scanf("%s", s + );
f[] = ;
for(int i = ; i <= N; i++) {
if(s[i] == '?')
for(int j = (i >> ); j >= max(, i - N / ); j--)
f[j] += f[j - ];
else cnt++;
}
ui ans = ;
for(int i = ; i <= N / - cnt; i++) ans *= ;
cout << ans * f[N >> ];
return ;
}
cf314E. Sereja and Squares(dp)的更多相关文章
- Codeforces.314E.Sereja and Squares(DP)
题目链接 http://www.cnblogs.com/TheRoadToTheGold/p/8443668.html \(Description\) 给你一个擦去了部分左括号和全部右括号的括号序列, ...
- CF 314 E. Sereja and Squares
E. Sereja and Squares http://codeforces.com/contest/314/problem/E 题意: 给你一个擦去了部分左括号和全部右括号的括号序列,括号有25种 ...
- codeforces 314E Sereja and Squares
discription Sereja painted n points on the plane, point number i (1 ≤ i ≤ n) has coordinates (i, 0). ...
- Codeforces 425E Sereja and Sets dp
Sereja and Sets 我们先考虑对于一堆线段我们怎么求最大的不相交的线段数量. 我们先按 r 排序, 然后能选就选. 所以我们能想到我们用$dp[ i ][ j ]$表示已经选了 i 个线段 ...
- Codeforces 314 E. Sereja and Squares
http://codeforces.com/contest/314/problem/E 题意: 原本有一个合法的括号序列 擦去了所有的右括号和部分左括号 问有多少种填括号的方式使他仍然是合法的括号序列 ...
- 蓝桥杯——试题 算法训练 Sereja and Squares
Java 代码 ```` import java.util.Scanner; public class Main { private static long num = 0; private stat ...
- codeforces 425D Sereja and Squares n个点构成多少个正方形
输入n个点,问可以构成多少个正方形.n,xi,yi<=100,000. 刚看题的时候感觉好像以前见过╮(╯▽╰)╭最近越来越觉得以前见过的题偶尔就出现类似的,可是以前不努力啊,没做出来的没认真研 ...
- CodeChef Sereja and Game [DP 概率 博弈论]
https://www.codechef.com/problems/SEAGM 题意: n个数(可能存在相同的数),双方轮流取数.如果在一方选取之后,所有已选取数字的GCD变为1,则此方输.问:1 若 ...
- Codeforces Round #243 (Div. 1)——Sereja and Squares
题目链接 题意: 给n个点,求能组成的正方形的个数. 四边均平行与坐标轴 大神的分析: 经典题 我们考虑每一种x坐标,显然仅仅有<= sqrt{N}个x坐标出现了> sqrt{N}次,我们 ...
随机推荐
- p3201&bzoj1483 梦幻布丁
传送门(洛谷) 传送门(bzoj) 题目 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色. 例如颜色分别为1,2,2,1的四个布丁一共有3段颜 ...
- 【PHP】Composer使用简介,composer install 和 update 区别
1.composer是php的依赖包管理工具 2.符合PSR-0/1/2/3/4 规范 3.composer安装推荐使用国内镜像 4.composer require/install/update 区 ...
- 剑指offer(65):获取数据流中的中位数
参考 https://blog.csdn.net/u011080472/article/details/51291089 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位 ...
- myeclipse 不能重新编译 web .classpath文件修改
这个问题困扰我好久了,就是当你从另一个workspace中拷到另一个workspace中,然后在import进myeclipse中就会出现无论你怎么改代码,编译完成后webroot目录下的classe ...
- 【mybatis 如何写union和union查询】
select d.* from (select a.CheckType,b.UserName,a.CheckNumber, a.PayName ,a.PayBank,a.PayBankNumber,a ...
- Dapper.Common基于Dapper的开源LINQ超轻量扩展
Dapper.Common Dapper.Common是基于Dapper的LINQ实现,支持.net core,遵循Linq语法规则.链式调用.配置简单.上手快,支持Mysql,Sqlserver(目 ...
- opencv使用findContours等方法出现内存损坏之类的不能调用问题
错误现象: 编译项目,如果该项目是debug,则在链接器输入配置opencv_world310d.lib如果是release则输入opencv_world310.lib,输入其中一个,多输,输错运行不 ...
- .Net Core WebApi返回日期格式的问题
环境:.net core 2.1 webapi 问题简介: 返回DateTime,前端接收到的字符有时候为2018-01-01T12:01:01,有时候为2018-01-01T01:01:01.722 ...
- REDHAT7.2解决docker启动失败问题
问题: [root@localhost ~]# service docker restartRedirecting to /bin/systemctl restart docker.serviceJo ...
- Unity MMORPG游戏优化经验分享
https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...