AT_abc345_c 题解

思路

这题中,个数就是 aiaja_i\ne a_j 的组数,然后这个组数就可以用总数 n×(n1)2\frac{n\times(n-1)}2 减去每种字符自我配对(ai=aja_i=a_j)的个数就行。另外如果有 ai=aja_i=a_j 的情况,交换 i,ji,j 也算一种情况,否则没有。

代码

# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, tot[26];
ll sum;
string a;
int main () {
	ios::sync_with_stdio (0);
	cin.tie (0);
	cout.tie (0);
	cin >> a;
	n = a.size ();
	sum = n * (n - 1ll) / 2;
	for (int i = 0; i < n; ++ i)
		++ tot[a[i] - 'a'];
	for (int i = 0; i < 26; ++ i)
		sum -= tot[i] * (tot[i] - 1ll) / 2;
	for (int i = 0; i < 26; ++ i)
		if (tot[i] > 1) { //有重复
			++ sum;
			break ;
		}
	cout << sum;
	return 0;
}
posted @   sz_jinzikai  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示