社区讨论
单调性优化 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;
}
目前可以过 的测试点,但是无法通过任何其它测试点,并非 TLE,是 WA。
https://www.luogu.com.cn/record/214511246
回复
共 2 条回复,欢迎继续交流。
正在加载回复...