[BZOJ 1794] Linear Garden
Link:
Solution:
IOI2008官方题解:传送门
要求序号,其实就是算字典序比其小的序列个数
从而使用数位$dp$的思想来解题,关键在于维护序列要$balance$这个条件
可以将$P$看作$-1$,而将$L$看作$+1$,最终要保证整个序列在一个宽最多为2的横条内
接下来就可以用状压$dp$计算方案数了
但实际上由于只有两种状态,每一种情形下是能直接推出结论的:
1、如果在宽仅为1的横条内,贡献为$2^{floor(k)}+2^{ceil(k)-1}$
2、如果在宽为2的横条内,贡献为$2^{floor(t)}$
官方题解好像情况2的结论有错?
状压$dp$的神仙做法:传送门 ,有点没看懂正确性在哪里……
Code:
#include <bits/stdc++.h> using namespace std;
const int MAXN=1e6+;
char s[MAXN];
int n,m,mx,mn,cur,l,pre[MAXN],res; int main()
{
scanf("%d%d%s",&n,&m,s);l=strlen(s);
pre[]=;for(int i=;i<=1e6;i++) pre[i]=pre[i-]*%m;
for(int i=;i<l;i++)
{
if(s[i]=='P')
{
if(max(mx,cur+)-mn<=)
{
float t=(l-i-(float))/;
if(max(mx,cur+)-mn==)
(res+=pre[(int)floor(t)]+pre[(int)ceil(t)]-+m)%=m;
else (res+=pre[(int)floor(t)])%=m;
}
cur--;mn=min(mn,cur);
}
else cur++,mx=max(mx,cur);
}
printf("%d",(res+)%m);
return ;
}
Review:
1、对于按字典序排列的计数问题,都可以引申为数位$dp$的题目
2、每一位状态数较小时尝试推结论
注意数形结合
[BZOJ 1794] Linear Garden的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj千题计划155:bzoj3543: [ONTAK2010]Garden
http://www.lydsy.com/JudgeOnline/problem.php?id=3543 枚举每一个点,作为左下角 然后枚举 相同的x坐标,y坐标 少的那个 作为另一个角 二分判断另外 ...
- uva10001 Garden of Eden
Cellular automata are mathematical idealizations of physical systems in which both space and time ar ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- 萌新笔记——Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))
在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
随机推荐
- 【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD
我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点 ...
- 【BZOJ 1124】[POI2008] 枪战Maf Tarjan+树dp
#define int long long using namespace std; signed main(){ 这个题一看就是图论题,然后我们观察他的性质,因为一个图论题如果没有什么性质,就是真· ...
- Win7命令mklink的使用
C盘空间越来越小,在Win7里还标红了,心里看得不舒服,得想一些方法腾出一些空间.看了AppData,Chrome占了1G多的空间. 当时安装Chrome浏览器时因为不能指定安装目录,所以Chrome ...
- synchronized ---- 作用
获得同步锁: 1.清空工作内存: 2.从主内存拷贝对象副本到工作内存: 3.执行代码(计算或者输出等): 4.刷新主内存数据: 5.释放同步锁.
- java 身份证15位转18位
/** * 根据身份证号获取性别 * * @param pid * 身份证号 * @return 性别 F为女M为男 */ public static String getSexByPid(Strin ...
- spring的普通类中如何取session和request对像
在使用spring时,经常需要在普通类中获取session,request等对像. 比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts ...
- 大数问题,通常用JAVA
e.g. HDU1002 简单加法 import java.math.BigInteger; import java.util.Scanner; public class Main { public ...
- HASHMAP原理解析,不错的文章
http://blog.csdn.net/vking_wang/article/details/14166593
- 【bzoj1911-[Apio2010]特别行动队】斜率优化
[题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个段的分数的总和最大. [输入格式] 第1行:1个 ...
- 【poj3415-Common Substrings】sam子串计数
题意: 给出两个串,问这两个串的所有的子串中(重复出现的,只要是位置不同就算两个子串),长度大于等于k的公共子串有多少个. 题解: 这题好像大神们都用后缀数组做..然而我在sam的题表上看到这题,做 ...