先将这个序列翻转,贪心找到最长的'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的更多相关文章

  1. Graph database_neo4j 底层存储结构分析(8)

    3.8  示例1:neo4j_exam 下面看一个简单的例子,然后看一下几个主要的存储文件,有助于理解<3–neo4j存储结构>描述的neo4j 的存储格式. 3.8.1    neo4j ...

  2. MapReduce 模式、算法和用例(MapReduce Patterns, Algorithms, and Use Cases)

    在新文章“MapReduce模式.算法和用例”中,Ilya Katsov提供了一个系统化的综述,阐述了能够应用MapReduce框架解决的问题. 文章开始描述了一个非常简单的.作为通用的并行计算框架的 ...

  3. MapReduce 模式、算法和用例

    翻译自:http://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/ 在这篇文章里总结了几种网上或者论文中常见的MapReduc ...

  4. 『OpenCV3』Harris角点特征_API调用及python手动实现

    一.OpenCV接口调用示意 介绍了OpenCV3中提取图像角点特征的函数: # coding=utf- import cv2 import numpy as np '''Harris算法角点特征提取 ...

  5. 【NS2】各种TCP版本 之 TCP Tahoe 和 TCP Reno(转载)

    实验目的 学习TCP的拥塞控制机制,并了解TCP Tahoe 和 TCP Reno的运行方式. 基础知识回顾 TCP/IP (Transmission Control Protocol/Interne ...

  6. word record 01

    词义默认包括发音 coil /kɔɪl/ 发音(kuo you) collage /kə'lɑʒ/ 发音(ke la shi) colleague /'kɑliɡ/ 发音 (ka li ge) com ...

  7. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  8. Track 造成Goldengate abended的那条record

    Email收到了这样的报错: 2016-12-07 02:52:22  WARNING OGG-01004  Aborted grouped transaction on 'MSP.USER_ACTI ...

  9. Bug #19528825 "UNABLE TO PURGE A RECORD"

    概述: 在生产环境中,当开启insert buffer时(参数innodb_change_buffering=all),部分实例偶尔会出现“UNABLE TO PURGE A RECORD”错误.这个 ...

随机推荐

  1. 洛谷2375 NOI2014动物园(KMP)

    题目链接: 题目. 简单一点来说,这个题就是求一个字符串的\(num\)数组的和,其中有\(num[i]\)表示1~i中有多少个不交叉的相等的前缀和后缀 的数目,要求一个\(O(n)\)的做法 QwQ ...

  2. 专业网络损伤仪HoloWAN meme只需5999元!

    在人们对互联网的依赖度越来越高的今天,人类社会逐步买入元宇宙时代,为了大大提高整个互联网的用户体验,HoloWAN团队推出每一个互联网应用开发团队都能用得起的专业网络损伤仪HoloWAN meme!售 ...

  3. SpringMVC 获得请求数据

    获得请求参数 客户端请求参数的格式是:name=value&name=value- - 服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数: 基本类型 ...

  4. Vulnhub实战-Dockhole_2靶机👻

    Vulnhub实战-Dockhole_2靶机 靶机地址:https://www.vulnhub.com/entry/darkhole-2,740/ 1.描述 hint:让我们不要浪费时间在蛮力上面! ...

  5. PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)

    1086 就不告诉你 (15分) 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定的 ...

  6. 个人记录:对于python学习的反思和总结(一)

    在写代码时,总是遇到写着写着不知道怎么写了的情况,或者无法把自己的想法用程序表达出来,所以有时候我们需要建立一个自己的编程思路,对一个具体程序的编程有一个比较清晰的想法:因此我把自己的思路总结了一下, ...

  7. PHP伪协议与文件包含漏洞1

    PHP文件包含漏洞花样繁多,需配合代码审计. 看能否使用这类漏洞时,主要看: (1)代码中是否有include(),且参数可控: 如: (2)php.ini设置:确保 allow_url_fopen= ...

  8. oo第一单元学习总结

    写在开头: 第一次接触面向对象思想和java语言,在学习以及完成作业的过程经历了一个比较痛苦的过程, 虽然在每次写作业时总是会有一些小小的抱怨,虽然写出的代码还是很差, 但是看到自己有所进步,还是感觉 ...

  9. Noip模拟79 2021.10.17(题目名字一样)

    T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...

  10. 身份证归属地查询免费api接口

    描写叙述 :依据身份证编号 查询归属地信息. 调用地址: http://api.k780.com:88/? app=idcard.get&idcard=510103195309280011&a ...