牛客IOI周赛26-普及组 B. 子序列(int128)
链接:https://ac.nowcoder.com/acm/contest/11233/B
来源:牛客网
题目描述
给出一个仅包含 a,b 的字符串 A。在 A 中间任意位置(包括开头结尾)插入一个字符,最大化 aab 作为子序列(可以不连续)在 A 中出现的次数。
输入描述:
第一行一个仅包含 a,b 的字符串 A。
输出描述:
输出一个整数,为插入一个字符后,aab 作为子序列在 A 中出现的次数的最大值。
示例1
输入
复制
abababa
输出
复制
10
说明
在第一个字符后插入一个 a,变为 aabababa。
示例2
输入
复制
ababbaababa
输出
复制
33
示例3
输入
复制
aa
输出
复制
1
实际上只可能把a加在头上或者把b加在末尾,取最大的即可。至于计算的方法是找到每个b然后算前面有多少个a,组合数搞一下即可。
写题解的目的是为了提醒一定要算一下数据范围,这个题最后一个点会爆long long,因此可以用int128乱搞,注意输出要写一个函数。
#include <bits/stdc++.h>
#define int __int128
using namespace std;
char s[6600005];
void print(__int128 x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)print(x/10);
putchar(x%10+'0');
}
signed main() {
scanf("%s", s);
int cnta = 0;
int ans1 = 0, ans2 = 0;
int sz = strlen(s);
for(int i = 0; i < sz; i++) {
if(s[i] == 'a') cnta++;
else {
ans1 += (cnta + 1) * cnta / 2;
ans2 += cnta * (cnta - 1) / 2;
}
}
ans2 += cnta * (cnta - 1) / 2;
if(ans1 > ans2) print(ans1);
else print(ans2);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!