USACO站外题求助,悬2关+诈骗
查看原帖
USACO站外题求助,悬2关+诈骗
518500
Ted_LightningTechG_楼主2024/7/19 15:33

#include<bits/stdc++.h>
#define int long long
struct node{
	int w;
	bool flag;
}a[50005];
int n, L, R;
std::string s;
int Ans;
bool cmp(node x, node y) {
	return x.w < y.w;
}
signed main() {
	std::cin >> n >> L >> R;
	for(int i = 1; i <= n; i ++) {
		std::cin >> s >> a[i].w;
		if(s == "S") a[i].flag = true;
	}
	if(n == 1 && a[1].flag) {
		std::cout << R - L + 1;
		return 0;
	}
	std::sort(a + 1, a + 1 + n, cmp);
	for(int i = 1; i <= n; i ++) {
		if(i == 1 && a[i].flag) {
			Ans += a[i].w - L;
			Ans += (a[i + 1].w + a[i].w >> 1) - a[i].w + 1;
		}
		else if(i == n && a[i].flag) {
			Ans += R - a[i].w;
			if((a[i - 1].w + a[i].w) & 1) Ans += a[i].w - ((a[i - 1].w + a[i].w >> 1) + 1) + 1;
			else {
				if(a[i - 1].flag) Ans += a[i].w - ((a[i - 1].w + a[i].w >> 1) + 1) + 1;
				else Ans += a[i].w - (a[i - 1].w + a[i].w >> 1) + 1;
			}
		}
		else if(a[i].flag) {
			if((a[i - 1].w + a[i].w) & 1) Ans += (a[i + 1].w + a[i].w >> 1) - ((a[i - 1].w + a[i].w >> 1) + 1) + 1;
			else {
				if(a[i - 1].flag) Ans += (a[i + 1].w + a[i].w >> 1) - ((a[i - 1].w + a[i].w >> 1) + 1) + 1;
				else Ans += (a[i + 1].w + a[i].w >> 1) - (a[i - 1].w + a[i].w >> 1) + 1;
			}
		}
	}
	std::cout << Ans;
	return 0;
}

20pts

2024/7/19 15:33
加载中...