首页 > 其他分享 >P2375 [NOI2014] 动物园

P2375 [NOI2014] 动物园

时间:2024-09-27 13:23:18浏览次数:1  
标签:P2375 next NOI2014 num 数组 ans 动物园 define

P2375 [NOI2014] 动物园

题意是对于每个前缀,求前缀后缀不交的且前后缀相等的前后缀数量数组,\(1\le len \le 10^6\)。

考虑先求出正常的 \(next\) 数组,KMP \(O(len)\) 求解。

对于 \(next'\) 数组,可以由前一个数的 \(next'\) 数组转移,如果新数大小超过了 \(\frac{i}{2}\) 就跳到前一个 \(next\) 数组。因为如果现在已经超出长度限制,加 \(1\) 后一定超出,所以这么做是正确的。

记录 \(num\) 只需要在过程中递推一下就好了。详见代码。

时间复杂度 \(O(len)\)。

#include<bits/stdc++.h>
// #define LOCAL
#define sf scanf
#define pf printf
#define rep(x,y,z) for(int x=y;x<=z;x++)
using namespace std;
typedef long long ll;
const int N = 1e6 + 7, mod = 1e9 + 7;
ll ans;
int n,l;
char c[N];
int nex[N],num[N];
void getans () {
    num[1] = 1;
    int j = 0;
    rep(i, 1, l - 1) {
        while(j && c[i] != c[j]) j = nex[j];
        if(c[i] == c[j]) j++;
        nex[i + 1] = j; num[i + 1] = num[j] + 1;
    }
    j = 0;
    rep(i, 1, l - 1) {
        while(j && (c[i] != c[j])) j = nex[j];
        if(c[i] == c[j]) j++;
        while((j<<1) > (i + 1) ) j = nex[j];
        ans = ans * (num[j] + 1) % mod;
    }
}
int main () {
    #ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("my.out", "w", stdout);
    #endif
    sf("%d" , &n );
    while (n--) {
        memset(nex, 0, sizeof(nex));
        memset(num, 0, sizeof(num));
        ans = 1;
        sf("%s", c);
        l = strlen(c);
        getans();
        pf("%lld\n", ans);
    }
}

标签:P2375,next,NOI2014,num,数组,ans,动物园,define
From: https://www.cnblogs.com/liyixin0514/p/18435496

相关文章

  • springboot+vue网上动物园售票系统的设计与实现【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字化转型已成为各行各业不可逆转的趋势。在旅游业中,特别是以动物园为代表的休闲娱乐场所,传统的售票模式逐渐暴露出效率低下、排队时间长、信息更新不及时等弊端。游客对于便捷、高效的购票体验有着日益增长......
  • 守护动物乐园:视频AI智能监管方案助力动物园安全与秩序管理
    一、背景分析近日,某大熊猫参观基地通报了4位游客在参观时,向大熊猫室外活动场内吐口水的不文明行为。这几位游客的行为违反了入园参观规定并可能对大熊猫造成严重危害,已经被该熊猫基地终身禁止再次进入参观。而在此前,另一熊猫基地也曾通报过游客向大熊猫活动场内扔甘蔗、石......
  • Java计算机毕业设计动物园售票系统的设计和实现(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加快和居民生活水平的提升,动物园作为集科普教育、休闲娱乐于一体的公共场所,日益受到公众的青睐。然而,传统的动物园售票方式往往存在......
  • P4211 [LNOI2014] LCA
    题目大意给出一个\(n\)个节点的有根树。设\(dep[i]\)表示点\(i\)的深度,\(\operatorname{LCA}(i,j)\)表示\(i\)与\(j\)的最近公共祖先。有\(m\)次询问,每次询问给出\(l,r,z\),求\(\sum_{i=l}^rdep[\operatorname{LCA}(i,z)]\)。\(1\len,m\le50000\)。思......
  • 洛谷P2375 [NOI2014] 动物园
    动物园题目描述输入格式输出格式输入输出样例输入3aaaaaababcababc输出36132开始时都没看出来这是kmp板子题先看看AC代码吧#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintmaxn=1e6+10;constintmod=1e9+7;chara[maxn];in......
  • 动物园
    [NOI2014]动物园题目描述近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。某天,园长给动物们讲解KMP算法。园长:“对于一个字符串\(S\),它......
  • 状态压缩dp——动物园
    题目描述新建的圆形动物园是亚太地区的骄傲。圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物。如下图所示:你是动物园的公关主管。你要做的是,让每个参观动物园的游客都尽可能高兴。今天有一群小朋友来到动物园参观,你希望能让他们在动物园度过一段美好的......
  • 动物园
    [APIO2007]动物园题目描述新建的圆形动物园是亚太地区的骄傲。圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一种动物。如下图所示:你是动物园的公共主管。你要做的是,让每个来动物园的人都尽可能高兴。今天有一群小朋友来动物园参观,你希望能让他们在动物园......
  • P3622 [APIO2007] 动物园 -题解
    好写爱写没事干所以有了这篇题解洛谷P3622[APIO2007]动物园题解$Link$hzoi题库洛谷题目说的挺繁琐,其实就传达了一个很简单的信息:\(n\)个动物,\(c\)个小孩,每个小孩能看到\(5\)个动物(所在的位置)\(E\)到\(E+4\),有\(F\)个害怕的动物,\(L\)个喜欢的动物。如果视野中有至......
  • P4211 [LNOI2014] LCA 题解
    link切入这道题,首先要思考所有LCA的分布特征。显然,对于任意\(\text{LCA}(i,j)\),都满足LCA是\(i,j\)的祖先。那么对于一个询问,可以找到所有\(i\in[l,r]\)的祖先,还可以找所有\(z\)的祖先。明显,找\(z\)的祖先会方便很多:它们都分布在\(z\)到根节点的那条链上,这应......