其实我不是很清楚这题需要题解的意义在哪,毕竟这个题目我是按照入门级难度出的大水题,还有其实你们普及组考完了可以去提高组试试的啦~

这题很明显模拟

Trick:

Just do it

由于数据范围 N105N \le 10^5,我们完全可以在 O(N)O(N) 的时间内遍历所有的球,不需要任何复杂的优化或数据结构。

我们需要维护两个变量:

  1. cnt:记录完美回击的次数(答案)。
  2. s:记录当前的专注度(也是判断条件)。

按照题目描述的逻辑进行单次扫描:

  • 碰到简单的球(SAiS \ge A_i):cnt 加 1,s 加 1(状态提升)。
  • 碰到难的球(S<AiS < A_i):s 减 1(状态下滑)。

Note 注意s不会为0,要特判哦

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, s;
vector<int> a;
signed main() {
	ios::sync_with_stdio(0), cin.tie(0);
	//freopen("Ryoma.in", "r", stdin);
	//freopen("Ryoma.out", "w", stdout);
	cin >> n >> s;
	a.resize(n);
	int cnt = 0;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		if (s >= a[i]) {
			cnt++;
			s++;
		} else {
			s--;
			if (s < 0) s = 0;
		}
	}
	cout << cnt << " " << s << endl;
	return 0;
}

0 条评论

目前还没有评论...