【题目描述】:
现在有一个字符串,每个字母出现的次数均为偶数。接下来我们把第一次出现的字母a和第二次出现的a连一条线,第三次出现的和四次出现的字母a连一条线,第五次出现的和六次出现的字母a连一条线...对其他25个字母也做同样的操作。
现在我们想知道有多少对连线交叉。交叉的定义为一个连线的端点在另外一个连线的内部,另外一个端点在外部。
【输入描述】:
一行一个字符串。保证字符串均由小写字母组成,且每个字母出现次数为偶数次。
【输出描述】:
一个整数,表示答案。
【样例输入】:
abaazooabz
【样例输出】:
3
【样例说明】:
/
【时间限制、数据范围及描述】:
时间:2s 空间:256M
对于30% 的数据,字符串长度不超过50。
对于100% 的数据,字符串长度不超过100,000。
#include#include #include #include #include #include using namespace std;char s[100610];int kdl[36],ans,las[36];int main(){ scanf("%s",s+1); int n=strlen(s+1); for(int i=1;i<=n;i++){ int q=s[i]-'a'+1; kdl[q]++; kdl[q]%=2; if(kdl[q]==0){ for(int j=1;j<=26;j++){ if(las[j]>las[q]&&kdl[j]){ ans++; } } } las[q]=i; } printf("%d\n",ans); return 0;}