【KMP】 HDU 3374 String Problem 最小表示法
来源:互联网 发布:131458com淘宝账号查询 编辑:程序博客网 时间:2024/05/16 05:43
链接
求最小/大 字典序的串在的rank和出现次数
最小表示法:起始位置i,j 增加k的过程中比较大小
不相等时改变起始位置i/j=i/j+k+1,k=0 ;
意味着后缀都小于当前最小串
//#include<bits/stdc++.h>//using namespace std;//const int eps=1e-8;//const int maxn=100022;//#define LL __int64//int main()//{// return 0;//}#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;#include <queue>#include <string>#include <cstring>#include <sstream>#include <map>#include <vector>#define LL long longconst int maxn=2001000;int next1[maxn];int get_next(char *s,int len){ int i=0,j=-1; next1[0]=j; while(i<len) { if(j==-1||s[i]==s[j]) i++,j++,next1[i]=j; else j=next1[j]; }}int KMP(char *a,int alen,char *b,int blen){ int i=0,j=0; int num=0; while(i<alen-1&&j<blen) { if(j==-1||a[i]==b[j]) i++,j++; else j=next1[j]; if(j==blen) { j=next1[j];num++; } } return num;}int get_mstring(char *s,int flag){ int len=strlen(s); int i=0,j=1,k=0; while(i<len&&j<len&&k<len) { int t=s[(i+k)%len]-s[(j+k)%len]; if(t==0) k++; else { if(flag) { if(t>0) j+=k+1; else i+=k+1; } else { if(t>0) i+=k+1; else j+=k+1; } if(i==j) j++; k=0; } } return min(i,j);}char s[1000002];int main(){ int n; while(scanf("%s",s)!=EOF) { int ln=get_mstring(s,0); int rn=get_mstring(s,1); int len=strlen(s); get_next(s,len); int x=(len-next1[len]); int ans=len%x?1:len/x; printf("%d %d %d %d\n",ln+1,ans,rn+1,ans); } return 0;}
0 0
- HDU 3374 String Problem(最小最大表示法+KMP)
- HDU 3374 String Problem KMP-最小最大表示法
- HDU 3374String Problem(最大最小表示法+KMP)
- hdu 3374 String Problem(字符串最小最大表示法+kmp)
- hdu 3374 String Problem (最小表示法+KMP)
- hdu 3374 String Problem (最小表示法+kmp next[])
- hdu 3374 String Problem 【kmp+最小(大)表示法】
- 【KMP】 HDU 3374 String Problem 最小表示法
- hdu 3374 String Problem(最小表示法+kmp)
- HDU 3374 String Problem(最小表示法·KMP)
- hdu 3374 String Problem (kmp+最大最小表示法)
- HDU 3374 String Problem (KMP+最大最小表示法)
- HDU 3374 String Problem(最大最小表示法+kmp)
- hdu 3374 String Problem(KMP+最大最小表示法)
- HDU 3374 String Problem (KMP+最大最小表示)
- hdu 3374 String Problem(KMP+字符串最小最大表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- HDU 3374 String Problem (KMP+最大最小表示)
- Golang png Decode解析不了png图片
- Charles抓包
- 记录一个mysql按日期分组统计的查询
- 动态加载字符根据字符串的数量和长度动态加载
- 写给将要实习的你-实习前你必须知道的几件事-SQL命令(二)
- 【KMP】 HDU 3374 String Problem 最小表示法
- Set--TreeSet实现分析
- MySql的连接管理与安全性
- HttpServletRequest.getParameter("key") 和 HttpServletRequest.getParameterMap().get("key")
- TOJ 4116 GCD's magic
- muduo网络编程分包和解包(一)
- #26 Remove Duplicates from Sorted Array
- 每天一个linux命令(29):chgrp命令
- Hibernate异常:NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/