vijos 1005

kmp算法的应用

不懂dev-c++搞什么,某个循环下不去,一直卡在那里....

或许他今天心情不好?明天再试试吧...不浪费时间纠结这个了

这题就是很裸的kmp算法的应用啦...模板题

然后顺便学习了一下如何将数字转成字符串

#include<cstdlib>

itoa(num,a,10)

注意这里的a是字符串或是字符数组,不能是单个字符恩

附上代码:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
char s[10000000],p[201];
void getnext(char *p,int *next){
     int m=strlen(p);
     next[0]=0;next[1]=0;
     for(int i=0;i<m;i++){
     	int j=next[i];
     	while(j && p[i]!=p[j]) j=p[j];
     	next[i+1]=(p[i]==p[j]?j+1:0);
     }
}
void kmp(char *s,char *p){
	int next[201];
	getnext(p,next);
	int n=strlen(s),m=strlen(p);
	int j=0;
	for(int i=0;i<n;i++){
		while(j && p[j]!=s[i]) j=next[j];
		if(p[j]==s[i]) j++;
		if(j==m){
			printf("%d",i-m+1);
			return;
		}
	}
}
void get(){
	int ans=0;
	char ss[8];
	for(int i=1;i<=100000;i++){
        itoa(i,ss,10);
        int l=strlen(ss);
        for(int j=0;j<l;j++){
        	s[ans++]=ss[j];
        }
	}
}
int main(){
	cin>>p;
	get();
	kmp(s,p);
	return 0;
}

  

时间: 2024-10-09 15:01:33

vijos 1005的相关文章

【vijos】1757 逆序对(dp)

https://vijos.org/p/1757 有时候自己sb真的是不好说... 我竟然想了半天都没想到这个转移. 我是有多傻.... 我们设f[i][j]表示1~i的排列且逆序对恰好是j的方案数. 显然我们只需要将i放进i-1排列中就行了. 而且发现i始终大于i-1 那么就好做了,我们只要将所有i放到i-1序列的位置的方案全都加起来即可,即: f[i][j]=sum{f[i-1][k], max{0, j-i+1}<=k<=j} 用前缀和搞搞就行了. #include <cstdio

【vijos】1750 建房子(线段树套线段树+前缀和)

https://vijos.org/p/1750 是不是我想复杂了.... 自己yy了个二维线段树,然后愉快的敲打. 但是wa了两法.......sad 原因是在处理第二维的更新出现了个小问题,sad. void pushup1(int x) { for1(i, 1, mm<<2) mn[x][i]=min(mn[lc][i], mn[rc][i]); } 这里注意是mm*4...我该好好想想了..这是在dbg的时候找出来的问题.sad. 我觉得很奇怪,线段树的底层节点一共就mm个,那么整棵树

【vijos】1764 Dual Matrices(dp)

https://vijos.org/p/1764 自从心态好了很多后,做题的确很轻松. 这种题直接考虑我当前拿了一个,剩余空间最大能拿多少即可. 显然我们枚举每一个点拿出一个矩形(这个点作为右下角),然后剩余空间我们只需要考虑i+1~n和j+1~m这一块空间即可(至于为什么多想想QAQ) 所以我们维护i+1~n和j+1~m能取到的最大矩形即可. 显然二维前缀和,然后再维护一个二维 mx[i][j]=max{get(i, j), mx[i+1][j], mx[i][j+1]},然后每一次找一个点i

【模拟】Vijos P1005 超长数字串

题目链接: https://vijos.org/p/1005 题目大意: 无限的正整数按顺序拼接成字符串S(S=12345678910111213...),给你一个字符串A(len<=200)求这个字符串在S中最早出现的位置. (答案超过long long ,无法用KMP,不要相信标签) 题目思路: [模拟] 这题简直了!!!!!!大模拟啊.细节超级多.疯狂TLE+WA+RE了17次才AC. 第一次写了一整天没写过,放了好久,昨天又写了一整天(哎效率低下.) 首先分两种普遍的情况和两种特殊情况考

Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】

弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样,永恒就可以从别的地方进攻摧毁战壕,从而消灭mx的部队. 战壕都有一个保护范围,同它的攻击

CSUFT 1005 Coffin Tiles

1005: Coffin Tiles Time Limit: 1 Sec      Memory Limit: 128 MB Submit: 2      Solved: 2 Description The Pumpkin King has a great idea for this Christmas: Personalized coffins for all the good little boys and girls! To make them extra special, Jack ha

PAT 乙级 1005 继续(3n+1)猜想 (25) C++版

1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候,我们需要计算3.5.8.4.2.1,则当我们对n=5.8.4.2进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重

Vijos P1785 同学排序【模拟】

同学排序 描述 现有m位同学,第1位同学为1号,第2位同学为2号,依次第m位同学为m号.要求双号的学生站出来,然后余下的重新组合,组合完后,再次让双号的学生站出来,重复n次,问这时有多少同学出来站着? 样例1 样例输入1 1989 5 样例输出1 1926 限制 1s 提示 [数据范围] 1≤n≤10 100≤m≤100000 题目链接:https://vijos.org/p/1785 分析:站出序号为偶数的人,如果总人数为奇数,剩余人数向上取整再折半就好了! 下面给出AC代码: 1 #incl

杭电女生赛1001 1002 1003 1005 1008 hdu6023 6024 6025 6027 6030

代码先贴这里 #include "iostream" #include "string.h" #include "stack" #include "queue" #include "string" #include "vector" #include "set" #include "map" #include "algorithm&quo