AT_abc345_c的题解

(一)

首先交换相同字符不改变字符串形态,那么就先统计是否有相同字符。

交换不同字符容易证明不同操作后字符串各不相同。

用前缀和或后缀和维护 i+1n 中与 i 位置字符不同的数量。

(二)

AC 代码。

#include<bits/stdc++.h>
#define int long long
using namespace std;
char ch[1000010];
int vis[1000010][27],ans,n;
signed main(){
	scanf("%s",ch+1);
	n=strlen(ch+1);
	for(int i=1;i<=n;i++){
		memcpy(vis[i],vis[i-1],sizeof vis[i]);
		vis[i][ch[i]-'a']++;
	}
	bool op=0;
	for(int i=1;i<=n;i++){
		int pos=ch[i]-'a';
		if(vis[n][pos]>vis[i][pos])op=1;
		ans+=n-i-(vis[n][pos]-vis[i][pos]);
	}
	printf("%lld\n",ans+op);
	return 0;
}
posted @   Jerry_heng  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示