Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) C(二分+KMP)
http://codeforces.com/contest/1129/problem/C
#include<bits/stdc++.h>
#define fi first
#define se second
#define INF 0x3f3f3f3f
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pqueue priority_queue
#define NEW(a,b) memset(a,b,sizeof(a))
#define lowbit(x) (x&(-x))
#define si(x) scanf("%d",&x)
#define sl(x) scanf("%lld",&x)
#define lc (d<<1)
#define rc (d<<1|1)
const double pi=4.0*atan(1.0);
const double e=exp(1.0);
const int maxn=1e6+;
typedef long long LL;
typedef unsigned long long ULL;
const LL mod=1e9+;
const ULL base=1e7+;
using namespace std;
LL a[maxn],b[maxn],Next[maxn];
LL dp[][];
void get_next(int m){
Next[]=-;
int k=-;
int j=;
while(j<m){
while(k>-&&b[k]!=b[j]){
k=Next[k];
}
if(b[k]==b[j]||k==-){
k++;
}
Next[++j]=k;
}
}
bool kmp(int n,int m){
int k=;
for(int i=n-m+;i<=n;i++){
b[k++]=a[i];
}
get_next(m);
k=;
for(int i=;i<n;i++)
{
while(k>&&b[k]!=a[i]){
k=Next[k];
}
if(b[k]==a[i]){
k++;
}
if(k==m){
return ;
}
}
return ;
}
bool check(int l){
if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
return ;
}
int main(){
int n;
LL sum=;
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&a[i]);
if(i==){
dp[][]=;
printf("1\n");
}
else{
int l=,r=i;
int ans=;
while(l<=r){
int mid=(l+r)>>;
if(kmp(i,mid)){
l=mid+;
ans=max(ans,mid);
}
else{
r=mid-;
}
}
dp[i][i]=;
if(i>) dp[i-][i]=;
if(i>) dp[i-][i]=;
if(i>&&check(i-)) dp[i-][i]=;
for(int j=i-;j>=;j--){
dp[j][i]+=dp[j][i-]*dp[i-][i];
dp[j][i]%=mod;
}
for(int j=i-;j>=;j--){
dp[j][i]+=dp[j][i-]*dp[i-][i];
dp[j][i]%=mod;
}
for(int j=i-;j>=;j--){
dp[j][i]+=dp[j][i-]*dp[i-][i];
dp[j][i]%=mod;
}
for(int j=i-;j>=;j--){
dp[j][i]+=dp[j][i-]*dp[i][i];
dp[j][i]%=mod;
}
for(int j=i-ans;j>=;j--){
sum+=dp[j][i];
sum%=mod;
}
printf("%lld\n",sum);
}
}
}
Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) C(二分+KMP)的更多相关文章
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题解
Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题目链接:https://codeforces.com/contest/1130 ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) A - D2
A. Be Positive 链接:http://codeforces.com/contest/1130/problem/A 题意: 给一段序列,这段序列每个数都除一个d(−1e3≤d≤1e3)除完后 ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)
A. Be Positive 题意:给出一个数组 每个树去除以d(d!=0)使得数组中大于0的数 大于ceil(n/2) 求任意d 思路:数据小 直接暴力就完事了 #include<bits/s ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)C. Morse Code
题意:给你n个01字符,每次问你前缀的所有本质不同的子串,由摩斯密码组成的方案数和. 题解:离线处理,把字符建sam,通过topo序来dp计算每个节点表示的子串方案数的和.统计答案时,把n个字符挨个匹 ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)
A - Toy Train 很显然,一个站有多少个糖,那么就要从这个点运多少次.设第i个点有\(a_i\)个糖,那么就要转\(a_i-1\)圈,然后再走一段.很显然最后一段越小越好. 然后枚举起点后, ...
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) 题解
A. Toy Train 时间限制:2 seconds 内存限制:256 megabytes 题意 有编号111~n(n≤5000)n(n\le 5000)n(n≤5000)的车站顺时针呈环排列,有m ...
- Codeforces Round 542 (Div. 2)
layout: post title: Codeforces Round 542 (Div. 2) author: "luowentaoaa" catalog: true tags ...
- Codeforces Round #542 题解
Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...
- int和integer;Math.round(11.5)和Math.round(-11.5)
int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...
随机推荐
- MD5 Hashing in Java
参考: MD5 Hashing in Java
- js 去除左右空格
/*****************************************************Method1*************************************** ...
- python 文件处理(转载)
本文给大家介绍Python文件处理相关知识,具体内容如下所示: 出处:https://www.jb51.net/article/80204.htm 1.文件的常见操作 文件是日常编程中常用的操作,通常 ...
- 记录2-在mac上安装ubuntu 16.04 LTS
前几天升级了我用了六七年mac硬件,内存由4G变为8G,硬盘也换成1T SSD,索性把一直想装的ubuntu也装了,方便温习下以前的工作环境. 我比较喜欢LTS的版本,所以安装了16.04. 主要步骤 ...
- linux centos 中访问linux 共享文件方法
mount -t cifs -o username="administrator",password="" //192.168.1.101/cp /mnt/nt ...
- 【转】【测试用例设计】WEB通用测试用例
易用性 1.便于使用.理解.并能减少用户发生错误选择的可能性 2.当数据字段过多时,使用便于用户迅速吸取信息的方式表现信息,突出重点信息,标红等方式 3.显示与当前操作相关的信息,给出操作提示. 4. ...
- Navicat连接到服务器端数据库
https://blog.csdn.net/javakklam/article/details/80060866
- python count函数
描述 Python count() 方法用于统计字符串里某个字符出现的次数.可选参数为在字符串搜索的开始与结束位置. 语法 count()方法语法: str.count(sub, start= 0,e ...
- JDK8 lameda表达式学习例子
lameda表达式是jdk8出的内容,作为一名老程序员,一直没接触.二次开发git上的一个开源项目,直接泪崩.于是赶紧补补课,直接上学习过程中的源码:package xx.test.lameda; i ...
- 在Airtest中如何使用无线模式控制手机
在使用Airtest超快速开发App爬虫文章的最后,我们留了一个尾巴:如何启动Airtest的无线模式,不用USB线就能控制手机? 本文将会讲到具体的做法.做法分为两种:第一种是在Airtest的ID ...