比赛 NOIP模拟赛1 评测结果 AAAAAAAAAA
题目名称 叉叉 最终得分 100
用户昵称 lajioj 运行时间 5.009 s
代码语言 C++ 内存使用 1.73 MiB
提交时间 2018-02-08 20:11:23
显示代码纯文本
#include<bits/stdc++.h>
#define A 1
#define B 2
#define C 3
#define D 4
#define E 5
#define F 6
#define G 7
#define H 8
#define I 9
#define J 10
#define K 11
#define L 12
#define M 13
#define N 14
#define O 15
#define P 16
#define Q 17
#define R 18
#define S 19
#define T 20
#define U 21
#define V 22
#define W 23
#define X 24
#define Y 25
#define Z 26
using namespace std;
const int MAXN = 100000+5;
char a[MAXN];

struct node{
	int l,r;
}vis[27][10001];

int k[30];
bool pd[27];

void file(){
	freopen("xxxx.in","r",stdin);
	freopen("xxxx.out","w",stdout);
}

int main(){
	file();
	for(int i=1;i<=26;++i){
		k[i] = 1;
	}
	scanf("%s",a+1);
	int len = strlen(a+1);
	for(int i=1;i<=len;++i){
		pd[a[i]-96] = true;
		if(vis[a[i]-96][k[a[i]-96]].l == 0) vis[a[i]-96][k[a[i]-96]].l = i;
		else{
			vis[a[i]-96][k[a[i]-96]].r = i;
			k[a[i]-96]++;
		}
	}
	for(int i=1;i<=26;++i){
		k[i]-=1;
	}
	int ans=0;
	for(int i=1;i<26;++i){
		if(!pd[i]) continue;
		for(int j=1;j<=k[i];++j){
			for(int n=i+1;n<=26;++n){
				if(!pd[n]) continue;
				for(int l=1;l<=k[n];++l){
					if(vis[i][j].r < vis[n][l].l) break;
					else if(vis[n][l].r < vis[i][j].l) continue;
					else if((vis[i][j].l < vis[n][l].l && vis[i][j].r > vis[n][l].l && vis[i][j].r < vis[n][l].r) || (vis[n][l].l < vis[i][j].l && vis[n][l].r > vis[i][j].l && vis[n][l].r < vis[i][j].r)){
						ans++;
					}
				}
			}
		}
	}
	printf("%d",ans);
	return 0;
}