这题挺愉快的啊~
做了十分钟(一开始好像脑子糊掉了qwq)
后来一下就想到啦(好吧好像是瞟了眼日文题解的第一行
题意:有一个由小写字母组成的字符串A,可以将一个区间翻转一次,问可能得到多少个不同的字符串(可以不翻转)。
如果A[i]=A[j](i<j),那么翻转[i,j]一定和翻转[i+1,j-1]得到的结果是一样哒,所以就是不合法方案。
拿总方案减去不合法方案即可!(翻转[i,i]没有什么意义w)
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define ll long long
using namespace std;
char st[200200];
int len,sum[200200];
int main()
{
scanf("%s",st+1);
len=strlen(st+1);
for(int i=1;i<=len;i++) sum[st[i]-'a'+1]++;
ll ans=(ll)len*(ll)(len-1)/2;
for(int i=1;i<=len;i++){
int c=st[i]-'a'+1;
sum[c]--;
ans-=sum[c];
}
printf("%lld\n",ans+1);
return 0;
}