zoukankan      html  css  js  c++  java
  • P4391 [BOI2009]Radio Transmission 无线传输

    呐呐呐题面

    这题可以说是kmp的简化版,也就是说只用求一下next数组,答案输出为n-next[n],那么为什么呢,其实这也很好想,next[i]存储的是下标为i的前缀与从头开始最长的相同前缀的尾下标,故next[n]表示的也就是除去第一个循环节之外的其他长度

    #include<set>
    #include<map>
    #include<list>
    #include<queue>
    #include<stack>
    #include<string>
    #include<cmath>
    #include<ctime>
    #include<vector>
    #include<bitset>
    #include<memory>
    #include<utility>
    #include<cstdio>
    #include<sstream>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N=1000005;
    
    int n;
    char s[N];
    int next[N];
    
    void getnext(){
    	for(int i=2,j=0;i<=n;i++){
    		while(s[i]!=s[j+1]&&j){
    			j=next[j];
    		}
    		if(s[i]==s[j+1]){
    			j++;
    		}
    		next[i]=j;
    	}
    }
    
    int main(){
    	scanf("%d",&n);
    	cin>>(s+1);
    	getnext();
    	printf("%d
    ",n-next[n]);
    	return 0;
    }
    

      我还是得抽时间整理一下kmp完整版和简化版的区别,有点略混。。

  • 相关阅读:
    npm的使用
    js 数组去重
    js实现对象或者数组深拷贝
    js简单排序
    js判断类型
    鼠标移入移出事件
    jq中的attr和prop属性
    移动端底部被输入法顶起的解决办法
    vue中的number
    javascript要点(上)
  • 原文地址:https://www.cnblogs.com/hahaha2124652975/p/11146673.html
Copyright © 2011-2022 走看看