其他分享
首页 > 其他分享> > CF794A Bank Robbery 题解

CF794A Bank Robbery 题解

作者:互联网

Content

Solution

如果我们略微想一下就明白这个问题的实质了:求所有在 \((b,c)\) 区间内的所有保险柜中的钞票总数。

为什么呢?

因为根据输入限制,小偷一定会在两个警察之间,又因为小偷不能走到有警察的保险柜,且小偷一次只能走一步,所以到 \(b\) 或者到 \(c\) 都不行,所以只能去偷所有在 \((b,c)\) 区间内的保险柜里面的钞票。

那么如何处理这些数据呢?用桶来存吗?

\(b<a<c\leqslant10^9\) 的数据让我们一震:不能用桶来存了,会 \(\texttt{MLE}\)。

那该怎么存?

你想想,如果我们去偷的话只会偷 \((b,c)\) 区间里的钞票,那不就是相当于判断对于一个钞票所在的保险柜 \(x_i\),是否有 \(b<x_i<c\) 就好了嘛?其他在此之外的所有钞票一律忽略,这样的空间就大大减少了很多了。

因此,最后的答案就是对于 \(i\in[1,n]\),满足 \(b<x_i<c\) 的 \(i\) 的个数。这个就非常好判断了。

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int a, b, c, n, x[100007], ans;

int main() {
	scanf("%d%d%d%d", &a, &b, &c, &n);
	for(int i = 1; i <= n; ++i) {
		scanf("%d", &x[i]);
		if(x[i] > b && x[i] < c)	ans++;
	}
	printf("%d", ans);
	return 0;
}

标签:保险柜,题解,d%,警察,钞票,CF794A,Robbery,小偷,include
来源: https://www.cnblogs.com/Eason-AC/p/15725114.html