[atAGC048F]01 Record
先将这个序列翻转,贪心找到最长的'101010……'的形式的子序列并删除,重复此过程并记这些字符串长度依次为$l_{1},l_{2},...,l_{n}$,若最终还有字符剩余则一定无解
假设$S$中元素从大到小依次为$x_{1},x_{2},...,x_{m}$,则合法当且仅当:
1.$L=\sum_{i=1}^{n}l_{i}=\sum_{i=1}^{m}x_{i}$
2.$\forall 1\le i\le n,\sum_{j=1}^{i}\lfloor \frac{l_{j}}{2}\rfloor\ge \sum_{j=1}^{i}\lfloor \frac{x_{j}}{2}\rfloor$(可以证明$n\le m$)
3.$\forall 1\le i\le n,\sum_{j=1}^{i}\lceil \frac{l_{j}}{2}\rceil\ge \sum_{j=1}^{i}\lceil \frac{x_{j}}{2}\rceil$
考虑必要性,第一个条件是因为$x_{i}$必然操作$x_{i}$次从而产生长为$x_{i}$的串,而$\sum_{i=1}^{n}l_{i}$即为序列长度(有剩余字符无解),因此相等
对于第2和3个限制(以2为例),每一个$x_{i}$产生了一个长度为$x_{i}$的'101010……'的序列,以此为$l_{i}$则恰好满足,那么选择最长的'101010……'前缀和一定不会变小,因此满足该条件
充分性的证明过程可以看原题解后半部分:
考虑dp,令$f[i][j][k][l]$表示有多少种$x_{1},x_{2},...,x_{i}$满足$\sum_{t=1}^{i}\lfloor \frac{x_{t}}{2}\rfloor=j$且$\sum_{t=1}^{i}\lceil \frac{x_{t}}{2}\rceil=k$且$x_{i}=l$,这样转移复杂度为$o(L^{5})$,最终答案即$\sum_{i=n}^{L}\sum_{l=1}^{L}f[i][\sum_{j=1}^{n}\lfloor\frac{l_{j}}{2}\rfloor][\sum_{k=1}^{n}\lceil\frac{l_{k}}{2}\rceil][l]$
由于$x_{1}\ge x_{2}\ge ...\ge x_{i}$,而$\sum_{j=1}^{i}x_{i}\le L$,因此$l\le \frac{L}{i}$,再通过前缀和可以优化到$o(L^{3}\ln L)$,空间上通过对第一维滚动可以做到$o(L^{3})$
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 305
4 #define mod 1000000007
5 int n,m,ans,a[N],s1[N],s2[N],f[2][N][N][N];
6 char s[N];
7 int main(){
8 scanf("%s",s);
9 int l=m=strlen(s);
10 for(int i=0;i<l/2;i++)swap(s[i],s[l-i-1]);
11 while (l){
12 if (s[0]=='0'){
13 printf("0");
14 return 0;
15 }
16 int p=1,ll=l;
17 n++;
18 l=0;
19 for(int i=0;i<ll;i++)
20 if (s[i]-'0'!=p)s[l++]=s[i];
21 else{
22 a[n]++;
23 p^=1;
24 }
25 }
26 for(int i=1;i<=m;i++)s1[i]=s1[i-1]+a[i]/2;
27 for(int i=1;i<=m;i++)s2[i]=s2[i-1]+(a[i]+1)/2;
28 f[0][0][0][m]=1;
29 for(int i=0,p=1;i<m;i++,p^=1){
30 for(int j=0;j<=s1[i+1];j++)
31 for(int k=0;k<=s2[i+1];k++)
32 for(int l=1;l<=m/max(i-1,1);l++)f[p][j][k][l]=0;
33 for(int j=0;j<=s1[i];j++)
34 for(int k=0;k<=s2[i];k++){
35 for(int l=m/max(i,1)-1;l;l--)
36 f[p^1][j][k][l]=(f[p^1][j][k][l]+f[p^1][j][k][l+1])%mod;
37 for(int l=1;l<=m/(i+1);l++)
38 if ((j+l/2<=s1[i+1])&&(k+(l+1)/2<=s2[i+1]))
39 f[p][j+l/2][k+(l+1)/2][l]=(f[p][j+l/2][k+(l+1)/2][l]+f[p^1][j][k][l])%mod;
40 }
41 if (i>=n-1)
42 for(int j=1;j<=m;j++)ans=(ans+f[p][s1[n]][s2[n]][j])%mod;
43 }
44 printf("%d",ans);
45 }
[atAGC048F]01 Record的更多相关文章
- Graph database_neo4j 底层存储结构分析(8)
3.8 示例1:neo4j_exam 下面看一个简单的例子,然后看一下几个主要的存储文件,有助于理解<3–neo4j存储结构>描述的neo4j 的存储格式. 3.8.1 neo4j ...
- MapReduce 模式、算法和用例(MapReduce Patterns, Algorithms, and Use Cases)
在新文章“MapReduce模式.算法和用例”中,Ilya Katsov提供了一个系统化的综述,阐述了能够应用MapReduce框架解决的问题. 文章开始描述了一个非常简单的.作为通用的并行计算框架的 ...
- MapReduce 模式、算法和用例
翻译自:http://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/ 在这篇文章里总结了几种网上或者论文中常见的MapReduc ...
- 『OpenCV3』Harris角点特征_API调用及python手动实现
一.OpenCV接口调用示意 介绍了OpenCV3中提取图像角点特征的函数: # coding=utf- import cv2 import numpy as np '''Harris算法角点特征提取 ...
- 【NS2】各种TCP版本 之 TCP Tahoe 和 TCP Reno(转载)
实验目的 学习TCP的拥塞控制机制,并了解TCP Tahoe 和 TCP Reno的运行方式. 基础知识回顾 TCP/IP (Transmission Control Protocol/Interne ...
- word record 01
词义默认包括发音 coil /kɔɪl/ 发音(kuo you) collage /kə'lɑʒ/ 发音(ke la shi) colleague /'kɑliɡ/ 发音 (ka li ge) com ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
- Track 造成Goldengate abended的那条record
Email收到了这样的报错: 2016-12-07 02:52:22 WARNING OGG-01004 Aborted grouped transaction on 'MSP.USER_ACTI ...
- Bug #19528825 "UNABLE TO PURGE A RECORD"
概述: 在生产环境中,当开启insert buffer时(参数innodb_change_buffering=all),部分实例偶尔会出现“UNABLE TO PURGE A RECORD”错误.这个 ...
随机推荐
- linux启动redis命令
首先进入到/usr/local/bin目录下(因为你redis安装的目录绝大多数都在这里) root@xxxx:/usr/local/bin#:redis-server wangconfig/redi ...
- Parameter index out of range(1 > number of parameters, which is 0)参数索引超出范围
今天在写项目的过程中,有一个模块是做多选删除操作,通过servlet获得多选框的value组,然后执行sql操作.如下: 1 @RequestMapping( "/delteCouse.do ...
- C#开发BIMFACE系列50 Web网页中使用jQuery加载模型与图纸
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列49 Web网页集成BIMFACE应用的技术方案>中介绍了目前市场主流 ...
- JVM详解(五)——运行时数据区-方法区
一.概述 1.介绍 <Java虚拟机规范>中明确说明:尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩.但对于HotSpot JVM而言,方法 ...
- OpenSSL version mismatch. Built against 1010104f, you have 101000cf
现象:公司一台Ubuntu16.04.2的ssh后台无法连接,telnet端口也不通,只能接显示器操作了. 先进行初步排查 查看服务是否启动(公司测试机ssh都是默认启动的) netstat -anp ...
- 【Docker】(11)---Docker的网络概念
一.实现原理 1.实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为C ...
- 笨方法学python中执行argv提示ValueError: not enough values to unpack (expected 4, got 1)
解决方法:选择Terminal中输入执行ex13.py 1 2 3 执行结果如下图
- 第二次Alpha Scrum Meeting
本次会议为Alpha阶段第二次Scrum Meeting会议 会议概要 会议时间:2021年4月24日 会议地点:线上会议 会议时长:30min 会议内容简介:本次会议主要由每个人展示自己目前完成的工 ...
- Noip模拟43 2021.8.18
T1 地一体 可以树形$dp$,但考场没写出来,只打了没正确性的贪心水了$30$ 然后讲题的时候B哥讲了如何正确的贪心,喜出望外的学习了一下 不难发现 每次士兵都会直接冲到叶子节点 从深的点再返回到另 ...
- 视频编码GOP
GOP group of pictures GOP 指的就是两个I帧之间的间隔. 比较说GOP为120,如果是720 p60 的话,那就是2s一次I帧. 在视频编码序列中,主要有三种编码帧:I帧.P帧 ...