E. Nearly Shortest Repeating Substring
题解:我们直接枚举长度
题目限制很多
首先,枚举长度要确保整除
然后我们在取从头开始的这个长度的字符串一一向下比对
这里我们还要去这个长度的i+=len下一个字串在一一去比对
然后就不可能往下取了,如果向下取那就说明前面两个串都不对,那么匹配就会大于1,不符合题目条件,所以我们只需要枚举前两个同长度的字符串即可
#include <bits/stdc++.h> //#pragma GCC optimize("Ofast") #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <cmath> //#define double long double #define int long long #define endl '\n' using namespace std; const int N=1e6+10,M=1e1; const int INF = 0x3f3f3f3f; const int mod=1e9+7; typedef pair<int,int> PII; int kmp(int a,int k,int p) { int ans=1; while (k) { if(k&1) ans=ans*a%p; k>>=1; a=a*a; } return ans; } void solve() { int n; cin>>n; string s; cin>>s; for(int len=1;len<=n;len++) { if(n%len!=0) continue; for(int i=0;i<n && i<=len;i+=len) { int ans=0; for(int j=0;j<n;j++) { ans+=(s[i+j%len]!=s[j]); } if(ans<=1) { cout<<len<<endl; return; } } } } signed main(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int T=1; cin>>T; while(T--){ solve(); } return 0; }
标签:div4,const,int,cf,long,四周,ans,长度,include From: https://www.cnblogs.com/whatdo/p/18106844