题解:P15012 再生
首先不认为本题评橙。
我们令找到的两个串为
我们观察到相同长度最大的
假设
然后我们枚举这个颜色相同但在
直接统计时间复杂度是
但是还有更简单的方式,我们考虑贪心的选取这个 vector,记录字母
时间复杂度是
这玩意能是橙色的我吃。赛时用了
建议本题评黄及以上。
:::info[代码]
#include <bits/stdc++.h>
#define ll long long
#define rep(i,a,n) for(int i = (a);i<=(n);++i)
#define endl '\n'
using namespace std;
template<typename T>inline void read(T &x){
char c = getchar();
short int t = 1;x = 0;
for(;!isdigit(c);c = getchar())if(c == '-')t=-1;
for(;isdigit(c);c = getchar())x = (x<<1) + (x<<3) + (c^48);
x*=t;
}
const int N = 1e5+10;
int n = 0;
char c[N];
vector<int> vec[30];
signed main(){
read(n);
scanf(" %s",c+1);
for(int i = 1;i<=n;++i){
vec[c[i] - 'a'].push_back(i);
}
int ans = 0;
for(int i = 0;i<26;++i){
int las = -1;
for(int j : vec[i]){
if(las == -1){
las = j;
continue;
}else{
// cout <<las<<" "<<j<<endl;
ans = max(n - (j - las),ans);
las = j;
}
}
}
if(ans == 0){
cout <<-1<<endl;
}else{
cout <<ans<<endl;
}
return 0;
}
/*
*/
/*
*/
:::
做完这个题之后我三个小时冲 T2,失败,完全正解,心态