[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”错误.这个 ...
随机推荐
- Netty-FastThreadLocal快在哪里呢?
来源于:https://www.wangdaye.net/archives/n-e-t-t-y-zhi-f-a-s-t-t-h-r-e-a-d-l-o-c-a-l 前言 netty的concurren ...
- python的参数传递是值传递还是引用传递?都不是!
[写在前面] 参考文章: https://www.cnblogs.com/spring-haru/p/9320493.html[偏理论,对值传递和引用传递作了总结] https://www.cnblo ...
- Zookeeper+Dubbo环境搭建与Demo测试
环境准备: 1. zookeeper-3.4.14 (下载地址:http://archive.apache.org/dist/zookeeper/) 2. dubbo-0.2.0 (下载地址 ...
- 让全链路压测变得更简单!Takin2.0重磅来袭!
自Takin社区版1.0发布两个多月以来,有很多测试同学陆续在各自的工作中运用了起来,其中包括金融.电商.物流.出行服务等行业.这个过程中我们收到了很多同学的反馈建议,同时也了解到很多同学在落地全链路 ...
- kivy画个半圆
from kivy.uix.boxlayout import BoxLayout from kivy.app import App class BoxLayoutWidget(BoxLayout): ...
- CCD摄像头视场角计算公式
视场角大小和CCD传感器尺寸和镜头焦距有关: 水平视场角 = 2 × arctan(w / 2f); 垂直视场角 = 2 × arctan(h / 2f); 视场角 = 2 × arctan(d / ...
- hdu 3887 Counting Offspring(DFS序【非递归】+树状数组)
题意: N个点形成一棵树.给出根结点P还有树结构的信息. 输出每个点的F[i].F[i]:以i为根的所有子结点中编号比i小的数的个数. 0<n<=10^5 思路: 方法一:直接DFS,进入 ...
- hdu 2955 Robberies(背包DP)
题意: 小偷去抢银行,他母亲很担心. 他母亲希望他被抓的概率真不超过P.小偷打算去抢N个银行,每个银行有两个值Mi.Pi,Mi:抢第i个银行所获得的财产 Pi:抢第i个银行被抓的概率 求最多能抢得多少 ...
- Envoy实现.NET架构的网关(五)集成Redis实现限流
什么是限流 限流即限制并发量,限制某一段时间只有指定数量的请求进入后台服务器,遇到流量高峰期或者流量突增时,把流量速率限制在系统所能接受的合理范围之内,不至于让系统被高流量击垮.而Envoy可以通过e ...
- 转移指令原理和Inline Hook
目录 转移指令原理和Inline Hook 转移指令 操作符offset jmp指令 根据位移进行转移的jmp指令 插播HOOK知识 Inline Hook Inline Hook 原理 Hook代码 ...