http://codeforces.com/contest/1129/problem/C

  1. #include<bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define INF 0x3f3f3f3f
  5. #define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
  6. #define pqueue priority_queue
  7. #define NEW(a,b) memset(a,b,sizeof(a))
  8. #define lowbit(x) (x&(-x))
  9. #define si(x) scanf("%d",&x)
  10. #define sl(x) scanf("%lld",&x)
  11. #define lc (d<<1)
  12. #define rc (d<<1|1)
  13. const double pi=4.0*atan(1.0);
  14. const double e=exp(1.0);
  15. const int maxn=1e6+;
  16. typedef long long LL;
  17. typedef unsigned long long ULL;
  18. const LL mod=1e9+;
  19. const ULL base=1e7+;
  20. using namespace std;
  21. LL a[maxn],b[maxn],Next[maxn];
  22. LL dp[][];
  23. void get_next(int m){
  24. Next[]=-;
  25. int k=-;
  26. int j=;
  27. while(j<m){
  28. while(k>-&&b[k]!=b[j]){
  29. k=Next[k];
  30. }
  31. if(b[k]==b[j]||k==-){
  32. k++;
  33. }
  34. Next[++j]=k;
  35. }
  36. }
  37. bool kmp(int n,int m){
  38. int k=;
  39. for(int i=n-m+;i<=n;i++){
  40. b[k++]=a[i];
  41. }
  42. get_next(m);
  43. k=;
  44. for(int i=;i<n;i++)
  45. {
  46. while(k>&&b[k]!=a[i]){
  47. k=Next[k];
  48. }
  49. if(b[k]==a[i]){
  50. k++;
  51. }
  52. if(k==m){
  53. return ;
  54. }
  55. }
  56. return ;
  57. }
  58. bool check(int l){
  59. if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
  60. if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
  61. if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
  62. if(a[l]==&&a[l+]==&&a[l+]==&&a[l+]==) return ;
  63. return ;
  64. }
  65. int main(){
  66. int n;
  67. LL sum=;
  68. scanf("%d",&n);
  69. for(int i=;i<n;i++){
  70. scanf("%d",&a[i]);
  71. if(i==){
  72. dp[][]=;
  73. printf("1\n");
  74. }
  75. else{
  76. int l=,r=i;
  77. int ans=;
  78. while(l<=r){
  79. int mid=(l+r)>>;
  80. if(kmp(i,mid)){
  81. l=mid+;
  82. ans=max(ans,mid);
  83. }
  84. else{
  85. r=mid-;
  86. }
  87. }
  88. dp[i][i]=;
  89. if(i>) dp[i-][i]=;
  90. if(i>) dp[i-][i]=;
  91. if(i>&&check(i-)) dp[i-][i]=;
  92. for(int j=i-;j>=;j--){
  93. dp[j][i]+=dp[j][i-]*dp[i-][i];
  94. dp[j][i]%=mod;
  95. }
  96. for(int j=i-;j>=;j--){
  97. dp[j][i]+=dp[j][i-]*dp[i-][i];
  98. dp[j][i]%=mod;
  99. }
  100. for(int j=i-;j>=;j--){
  101. dp[j][i]+=dp[j][i-]*dp[i-][i];
  102. dp[j][i]%=mod;
  103. }
  104. for(int j=i-;j>=;j--){
  105. dp[j][i]+=dp[j][i-]*dp[i][i];
  106. dp[j][i]%=mod;
  107. }
  108. for(int j=i-ans;j>=;j--){
  109. sum+=dp[j][i];
  110. sum%=mod;
  111. }
  112. printf("%lld\n",sum);
  113. }
  114. }
  115. }

Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) C(二分+KMP)的更多相关文章

  1. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题解

    Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题目链接:https://codeforces.com/contest/1130 ...

  2. 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)除完后 ...

  3. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)

    A. Be Positive 题意:给出一个数组 每个树去除以d(d!=0)使得数组中大于0的数 大于ceil(n/2) 求任意d 思路:数据小 直接暴力就完事了 #include<bits/s ...

  4. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)C. Morse Code

    题意:给你n个01字符,每次问你前缀的所有本质不同的子串,由摩斯密码组成的方案数和. 题解:离线处理,把字符建sam,通过topo序来dp计算每个节点表示的子串方案数的和.统计答案时,把n个字符挨个匹 ...

  5. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)

    A - Toy Train 很显然,一个站有多少个糖,那么就要从这个点运多少次.设第i个点有\(a_i\)个糖,那么就要转\(a_i-1\)圈,然后再走一段.很显然最后一段越小越好. 然后枚举起点后, ...

  6. 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 ...

  7. Codeforces Round 542 (Div. 2)

    layout: post title: Codeforces Round 542 (Div. 2) author: "luowentaoaa" catalog: true tags ...

  8. Codeforces Round #542 题解

    Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...

  9. int和integer;Math.round(11.5)和Math.round(-11.5)

    int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为int提供的封装类.int的默认值为0,而Integer的默认值为null,即Integer可 ...

随机推荐

  1. cok-filter

    小工具 # -*- coding: utf-8 -*- import pandas as pd def filterExcel(cokpath, keywords): df = pd.read_exc ...

  2. python中类似三元表达式的写法

    python中没有其它语言中的三元表达式,如: a = x > y ? m : n; python中的类似写法为: a = 1 b = 2 h = "" h = " ...

  3. dp练习--

    动态规划(DP)算法     动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法.利用各个阶段之间的关系,逐个求解,最终求得全局最优解,需要确认原问题与子问题.动态规划状态.边界状态.边界状态 ...

  4. Django字符串翻译

    文章出处:https://www.jb51.net/article/70077.htm Django模板使用两种模板标签,且语法格式与Python代码有些许不同. 为了使得模板访问到标签,需要将 {% ...

  5. amd显卡更新最新驱动鼠标顿卡的解决方法

    测试了下游戏,很稳.方法:在卡顿的状态下打开RADEON设置,依次点击显示器→规格→覆盖,将支持HDCP选为禁用,按提示重启即可.

  6. MacBook Home End

    For the Home command, press down the Fn + Left Arrow keystroke combination. For the End command, pre ...

  7. html5 video标签屏蔽右键视频另存为的js代码-HTML5教程

    点评:html5 video标签本身有下载功能但是在video区域内,点击右键可以将“视频另存为”下面是屏蔽右键视频另存为的js代码,有此需求的朋友不要错过   做HTML5的video标签,本身我们 ...

  8. 自学大数据(hadoop)第一天

    熟悉linux系统 1.安装linux系统-ubuntu 官网链接:https://www.ubuntu.com/download 下载ubuntu desktop 即可,拖拽到VMvare里即可安装 ...

  9. Python全栈开发记录_第七篇(模块_time_datetime_random_os_sys_hashlib_logging_configparser_re)

    这一篇主要是学习python里面的模块,篇幅可能会比较长 模块的概念:在Python中,一个.py文件就称之为一个模块(Module). 模块一共三种: python标准库 第三方模块 应用程序自定义 ...

  10. C 语言实现基于 Linux 的端口扫描程序

    Socket 常用函数: ⑴int socket(int protofamily, int type, int protocol); protofamily:即协议域,又称为协议族(family).常 ...