社区讨论

单调性优化 30pts 求救 qwq

P10282 [USACO24OPEN] Smaller Averages G参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhju02bz
此快照首次捕获于
2025/11/04 08:29
4 个月前
此快照最后确认于
2025/11/04 08:29
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn = 505;

int n, a[maxn], b[maxn];
struct node {
	int id;
	long double avg;
	friend bool operator < (node x, node y) {
		if (x.avg != y.avg) return x.avg < y.avg;
		return x.id < y.id;
	}
} s1[maxn][maxn], s2[maxn][maxn];
int s[maxn][maxn], f[maxn][maxn];

signed main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		a[i] += a[i - 1];
		for (int j = 0; j < i; j++) {
			s1[i][j + 1] = (node){j, double(a[i] - a[j]) / (i - j)};
		}
		sort(s1[i] + 1, s1[i] + i + 1);
	}
	for (int i = 1; i <= n; i++) {
		cin >> b[i];
		b[i] += b[i - 1];
		for (int j = 0; j < i; j++) {
			s2[i][j + 1] = (node){j, double(b[i] - b[j]) / (i - j)};
		}
		sort(s2[i] + 1, s2[i] + i + 1);
	}
	f[0][0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j <= n; j++) {
			for (int k = 1; k <= i; k++) {
				s[j][k] = s[j][k - 1] + f[s1[i][k].id][j];
			}
		}
		for (int j = 1; j <= n; j++) {
			for (int k = 1, l = 1; l <= j; l++) {
				while (k <= i && s1[i][k].avg <= s2[j][l].avg) k++;
				f[i][j] += s[s2[j][l].id][k - 1];
			}
		}
	}
	cout << f[n][n] << '\n';
	return 0;
}
目前可以过 N10N\le10 的测试点,但是无法通过任何其它测试点,并非 TLE,是 WA。
https://www.luogu.com.cn/record/214511246

回复

2 条回复,欢迎继续交流。

正在加载回复...