首页 > 代码库 > 字符串最小表示法 O(N)
字符串最小表示法 O(N)
#include<iostream>#include<stdio.h>#include<cstring>#define rep(i,n) for(int i=0;i<n;i++)#define sf scanf#define pf printfusing namespace std; int MinimumRepresentation(char *s, int l) { int i = 0, j = 1, k = 0, t; while(i < l && j < l && k < l) { t = s[(i + k) >= l ? i + k - l : i + k] - s[(j + k) >= l ? j + k - l : j + k]; if(!t) k++; else{ if(t > 0) i = i + k + 1; else j = j + k + 1; if(i == j) ++ j; k = 0; } } return (i < j ? i : j); } int myf_Minrepresentation(char *s,int n){ rep(i,n)s[n+i]=s[i]; int i=0,j=1; while(i<n&&j<n){ int k=0; while(k<=n && s[i+k] == s[j+k])++k; if(k>n)break; if(s[i+k] < s[j+k]) j+=k+1; else i+=k+1; if(i==j)++j; } return i<j?i:j;}char s[200001];int n;void solve(){ sf("%d",&n); sf("%s",s); // pf("%d\n",MinimumRepresentation(s,n)); pf("%d\n",myf_Minrepresentation(s,n));}int main(){ int T;sf("%d",&T); while(T--){ solve(); } return 0;}
神奇的东西,表示没看懂,先用了再说
字符串最小表示法 O(N)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。