【题解】[ARC113C] String Invasion
题面传送门
解决思路
题目大意是给你一个字符串
首先可以对照样例三找出规律。对于样例三 anerroroccurred
,最优的操作方法是:
-
先
后变成anerroroccurrrr
(改r
) -
再
次变成anerroroccccccc
(改c
) -
再
次变成anerrrrrrrrrrrr
(改r
)
可以发现,最优策略是从后往前找,每次找到可以操作的,就把它后面的所有字母都变成一样的。
假设字符串长度为
一次修改后,之后的字符都变相同了,所以将
AC Code
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
#define int long long
using namespace std;
string s;
int sum[200],ans;
signed main(){
IOS;TIE;
cin>>s;
sum[s[s.size()-1]]++;
sum[s[s.size()-2]]++;
for(int i=s.size()-3;i>=0;i--){
sum[s[i]]++;
if(s[i]==s[i+1]&&s[i+1]!=s[i+2]){
ans+=s.size()-i-sum[s[i]];
for(int j='a';j<='z';j++) sum[j]=0;
sum[s[i]]=s.size()-i;
}
}
cout<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通