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可 ...
随机推荐
- cok-filter
小工具 # -*- coding: utf-8 -*- import pandas as pd def filterExcel(cokpath, keywords): df = pd.read_exc ...
- python中类似三元表达式的写法
python中没有其它语言中的三元表达式,如: a = x > y ? m : n; python中的类似写法为: a = 1 b = 2 h = "" h = " ...
- dp练习--
动态规划(DP)算法 动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法.利用各个阶段之间的关系,逐个求解,最终求得全局最优解,需要确认原问题与子问题.动态规划状态.边界状态.边界状态 ...
- Django字符串翻译
文章出处:https://www.jb51.net/article/70077.htm Django模板使用两种模板标签,且语法格式与Python代码有些许不同. 为了使得模板访问到标签,需要将 {% ...
- amd显卡更新最新驱动鼠标顿卡的解决方法
测试了下游戏,很稳.方法:在卡顿的状态下打开RADEON设置,依次点击显示器→规格→覆盖,将支持HDCP选为禁用,按提示重启即可.
- MacBook Home End
For the Home command, press down the Fn + Left Arrow keystroke combination. For the End command, pre ...
- html5 video标签屏蔽右键视频另存为的js代码-HTML5教程
点评:html5 video标签本身有下载功能但是在video区域内,点击右键可以将“视频另存为”下面是屏蔽右键视频另存为的js代码,有此需求的朋友不要错过 做HTML5的video标签,本身我们 ...
- 自学大数据(hadoop)第一天
熟悉linux系统 1.安装linux系统-ubuntu 官网链接:https://www.ubuntu.com/download 下载ubuntu desktop 即可,拖拽到VMvare里即可安装 ...
- Python全栈开发记录_第七篇(模块_time_datetime_random_os_sys_hashlib_logging_configparser_re)
这一篇主要是学习python里面的模块,篇幅可能会比较长 模块的概念:在Python中,一个.py文件就称之为一个模块(Module). 模块一共三种: python标准库 第三方模块 应用程序自定义 ...
- C 语言实现基于 Linux 的端口扫描程序
Socket 常用函数: ⑴int socket(int protofamily, int type, int protocol); protofamily:即协议域,又称为协议族(family).常 ...