先将这个序列翻转,贪心找到最长的'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. LightningChart XY功能中的常见问题

    LightningChart XY功能中的常见问题 XY 是LightningChart 的重要功能之一,也是被用户使用最广泛的.用户经常对这个功能有着这样那样的疑问,现在将一些常用问题汇总了一下,希 ...

  2. 如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构

    作者 | 行松 阿里巴巴云原生团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  3. kvm安装window系统及使用NFS动态迁移

    验证是否开启虚拟化 # grep -E 'svm|vmx' /proc/cpuinfo - vmx is for Intel processors - svm is for AMD processor ...

  4. 题解 Math teacher's homework

    题目传送门 题目大意 给出 \(n,k\) 以及 \(a_{1,2,...,n}\) ,求有多少个 \(m_{1,2,...,n}\) 满足 \(\forall i,m_i\le a_i\) 且 \( ...

  5. Java(22)常用API一

    1 API 1.1 API概述 什么是API ​ API (Application Programming Interface) :应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的 ...

  6. C++ cin和while cin

    int main(){ string input; vector<string> arr; while(cin >> input) { cout << " ...

  7. Pycharm无法打开,双击没反应

    以下方案皆为引用,仅供参考. 方案一: 1.先声明一下,这种解决方法适用于任何版本的永久破解启动不了的情况(包括:2019版本的)2.下面直接切入正题之所以我们破解之后,不能正常启动的原因有两种:① ...

  8. JAVA String、StringBuffer、StringBuilder类解读

    JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...

  9. Beta阶段性总结

    1.题士开发总结 2.反思 2.1 Issue管理 从0522敲定各个功能的API后,团队成员及时沟通,积极开发,但由于开发过程没能有效体现在issue上(如未能及时在issue上形成记录,功能开发完 ...

  10. Flutter的环境配置以及一些常见问题

    flutter & AndroidStudio flutter的下载与配置 flutter是Google推出的基于Dart语言开发的跨平台开源UI框架,能够支持安卓与iOS. flutter框 ...