Link:

BZOJ 1794 传送门

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的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. bzoj千题计划155:bzoj3543: [ONTAK2010]Garden

    http://www.lydsy.com/JudgeOnline/problem.php?id=3543 枚举每一个点,作为左下角 然后枚举 相同的x坐标,y坐标 少的那个 作为另一个角 二分判断另外 ...

  3. uva10001 Garden of Eden

    Cellular automata are mathematical idealizations of physical systems in which both space and time ar ...

  4. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  5. 萌新笔记——Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))

    在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...

  6. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  7. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  8. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  9. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

随机推荐

  1. Linux shell命令无法使用

    配置java环境变量时,把PATH=$PATH:$HOME/bin中的冒号“:”错写成分号“;”.导致变量PATH配置错误,不能正确找到shell命令的文件位置.把/etc/profile 中java ...

  2. javaScript中的this关键字解析

    this是JavaScript中的关键字之一,在编写程序的时候经常会用到,正确的理解和使用关键字this尤为重要.接下来,笔者就从作用域的角度粗谈下自己对this关键字的理解,希望能给到大家一些启示, ...

  3. python 写 excel 模块 : xlwt

    主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...

  4. alt+ F8 设置无效(转)

    原文转自 https://blog.csdn.net/m372897500/article/details/7310251 具体修改方法如下: 工具-选项-环境-键盘-应用以下其他键盘映射方案,选择v ...

  5. Invalidate()(转)

    原文转自 http://m.blog.csdn.net/blog/piaopiaopiaopiaopiao/41521211 使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_E ...

  6. how to remove an element in lxml

    import lxml.etree as et xml=""" <groceries> <fruit state="rotten"& ...

  7. 智联招聘的python岗位数据结巴分词(二)

    上次获取第一次分词之后的内容了 但是数据数据量太大了 ,这时候有个模块就派上用场了collections模块的Counter类 Counter类:为hashable对象计数,是字典的子类. 然后使用m ...

  8. Javacore分析(转载)

    本文转自(http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuz ...

  9. 远程编写+调试服务器上的Python程序

    原帖参见(需自备梯子):https://webcache.googleusercontent.com/search?q=cache:1htdR2EXj5wJ:https://www.digitaloc ...

  10. Spark优化之一:分布式下的map操作是闭包

    例如对一个JavaPairRDD<String, String>做遍历操作,常见的,我们可以通过先通过collect()操作将它转化为Map对象再进行遍历,也可以使用Spark提供的map ...