您的位置:首页 > 其它

Atcoder Grand Contest 19b

2018-02-03 23:07 477 查看
题目在这里呀!

这题挺愉快的啊~
做了十分钟(一开始好像脑子糊掉了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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: