可爱的 Syx 刚学 OI,求助 CE

本地能过。

#include <iostream>
#include <algorithm>
namespace Syxqwq {
	inline int read() {
		register int x = 0, s = 1;
		char c = getchar();
		while (c > '9' || c < '0') {
			if (c == '-') s = -1;
			c = getchar();
		}
		while (c >= '0' && c <= '9') {
			x = (x << 1) + (x << 3) + (c - '0');
			c = getchar();
		}
		return x * s;
	}
	void Write(int x) {
		if (x < 0) {
			putchar('-');
			x = -x;
		}
		if (x > 9) Write(x / 10);
		putchar(x % 10 + '0');
	}
	inline void write(int x, char c) {
		Write(x);
		putchar(c);
	}
}
using namespace Syxqwq;
using std::sort;
typedef long long ll;
typedef std::pair<ll, ll> pii;
pii a[1010011];
ll sum[1010011];
ll n, c;
int main() {
	auto dis = [&](pii x) {
		return x.first + std::min(x.second, n - x.second + 1);
	};
	int T = read();
	while (T--) {
		n = read(), c = read();
		for (int i = 1; i <= n; ++i) a[i].first = read(), a[i].second = i;
		sort(a + 1, a + 1 + n, [&](pii x, pii y) {
			return dis(x) < dis(y);
		});
		int ans = 0;
		sum[0] = 0;
		for (int i = 1; i <= n; ++i) sum[i] = sum[i - 1] + dis(a[i]);
		for (int i = 1; i <= n; ++i) {
			auto pls = std::upper_bound(sum + 1, sum + 1 + n, c - a[i].first - a[i].second);
			if (pls - sum >= i) {
				auto _ = std::upper_bound(sum + 1, sum + 1 + n, c - a[i].first - a[i].second + dis(a[i]));
				ans = std::max(_ - sum, ans);
			} else {
				ans = std::max(ans, pls - sum + 1);
			}
		}
		write(ans, '\n');
	}
	return 0;
}
```
2 个赞

我真可爱,忘记 STL 里的 max 要求两个数同一个类型

2 个赞

可爱捏~( ̄▽ ̄)~*(●’◡’●)

3 个赞
#include <iostream>
#include <algorithm>
namespace Syxqwq {
	inline int read() {
		register int x = 0, s = 1;
		char c = getchar();
		while (c > '9' || c < '0') {
			if (c == '-') s = -1;
			c = getchar();
		}
		while (c >= '0' && c <= '9') {
			x = (x << 1) + (x << 3) + (c - '0');
			c = getchar();
		}
		return x * s;
	}
	void Write(int x) {
		if (x < 0) {
			putchar('-');
			x = -x;
		}
		if (x > 9) Write(x / 10);
		putchar(x % 10 + '0');
	}
	inline void write(int x, char c) {
		Write(x);
		putchar(c);
	}
}
using namespace Syxqwq;
using std::sort;
typedef long long ll;
typedef std::pair<ll, ll> pii;
pii a[1010011];
ll sum[1010011];
ll n, c;
int main() {
	auto dis = [&](pii x) {
		return x.first + std::min(x.second, n - x.second + 1);
	};
	int T = read();
	while (T--) {
		n = read(), c = read();
		for (int i = 1; i <= n; ++i) a[i].first = read(), a[i].second = i;
		sort(a + 1, a + 1 + n, [&](pii x, pii y) {
			return dis(x) < dis(y);
		});
		ll ans = 0;
		sum[0] = 0;
		for (int i = 1; i <= n; ++i) sum[i] = sum[i - 1] + dis(a[i]);
		for (int i = 1; i <= n; ++i) {
			auto pls = std::upper_bound(sum + 1, sum + 1 + n, c - a[i].first - a[i].second);
			if (pls - sum >= i) {
				auto _ = std::upper_bound(sum + 1, sum + 1 + n, c - a[i].first - a[i].second + dis(a[i]));
				ans = std::max((ll)(_ - sum - 1), ans);
			} else {
				ans = std::max(ans, (ll)(pls - sum));
			}
		}
		write(ans, '\n');
	}
	return 0;
}

现在是 70 分

2 个赞

把代码注释一下在发出来

感觉很难读懂

2 个赞

谁让人家是《刚学OI》的可爱的Syx呢

3 个赞

我代码特别好理解,不就是前缀和+二分吗

2 个赞

可爱捏

3 个赞

这难度是什么

  • 暂无判定
  • NOI/NOI+
  • 省选/NOI-
0 投票人
2 个赞

前缀那是什么东东

2 个赞