D. "a" String Problem
1.P8736 [蓝桥杯 2020 国 B] 游园安排2.P4341 [BJWC2010] 外星联络3.P4391 [BOI2009] Radio Transmission 无线传输4.P3435 [POI2006] OKR-Periods of Words5.G1. Division + LCP (easy version)6.P1435 [IOI2000] 回文字串7.P4290 [HAOI2008] 玩具取名8.F. 十六进制的异或
9.D. "a" String Problem
10.B. Camp Schedule11.P3805 【模板】manacher12.P4824 [USACO15FEB] Censoring S13.P4555 [国家集训队] 最长双回文串一句话题解
由于t必须要包含非a字符,所以假如t包含前k个非a字符,那么s所包含的非a字符数量一定是k的倍数
实施
遍历t能包含几个非a字符,然后再算有几种填充a的方法
复杂度
之所以有logn是因为遍历s包含的非a字符数量的因子
code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline void read(ll &x) {
x = 0;
ll flag = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-') flag = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}
x *= flag;
}
inline void write(ll x) {
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
ll solve() {
string s;
cin >> s;
ll n = s.length();
s = ' ' + s;
vector<ll> p;
for(ll i = 1; s[i]; i++) if(s[i] != 'a') p.push_back(i);
ll num = p.size();
if(!num) return n - 1;
ll ans = 0;
for(ll len = 1; len <= num; len++) {
if(num % len) continue;
bool flag = 1;
for(ll i = len; i < num; i++) {
if(s[p[i]] != s[p[i-len]]) {
flag = 0;
break;
}
if(i % len && p[i] - p[i-1] != p[i-len] - p[i-len-1]) {
flag = 0;
break;
}
}
if(flag) {
ll pregap = p[0] - 1, sufgap = n - p[num-1];
for(ll i = len; i < num; i += len) {
sufgap = min(sufgap, p[i] - p[i-1] - 1);
}
for(ll i = 0; i <= sufgap; i++) {
ans++;
if(sufgap - i > 0) ans += min(pregap, sufgap - i);
}
//printf("len:%d ans:%d\n",len,ans);
}
}
return ans;
}
int main() {
ll t;
read(t);
while(t--) {
write(solve());
putchar('\n');
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~