QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#606682 | #8936. Team Arrangement | UESTC_OldEastWest# | WA | 0ms | 3860kb | C++17 | 2.9kb | 2024-10-03 11:29:11 | 2024-10-03 11:29:13 |
Judging History
answer
#include <bits/stdc++.h>
const int INF = 1e9;
void Divide(int remain, int x, std::vector<int> &one_divide,
std::vector<std::vector<int> > &all_divide, bool first = true) {
assert(remain >= 0);
if (remain == 0) {
all_divide.emplace_back(one_divide);
return;
}
for (int i = std::min(x, remain); i >= 1; --i) {
one_divide.emplace_back(i);
Divide(remain - i, i, one_divide, all_divide, false);
one_divide.pop_back();
if (first) break;
}
}
void charming() {
int n; std::cin >> n;
std::vector<std::pair<int, int> > stu(n);
for (int i = 0, l, r; i < n; ++i) {
std::cin >> l >> r;
stu[i] = std::make_pair(l, r);
}
// sort(stu.begin(), stu.end(), [&](std::pair<int, int> &x,
// std::pair<int, int> &y) {
// if (x.second != y.second) return x.second < y.second;
// else return x.first < y.first;
// });
sort(stu.begin(), stu.end());
std::vector<int> w(n + 1);
for (int i = 1; i <= n; ++i) std::cin >> w[i];
std::vector<std::vector<int> > divide;
for (int i = 1; i <= n; ++i) {
std::vector<int> vec;
Divide(n, i, vec, divide);
}
int ans = -INF;
std::vector<int> vis(n + 1);
std::function<int(std::vector<int> &)> Solve
= [&](std::vector<int> &team) {
int nans = 0;
for (int x : team) nans += w[x];
if (nans < ans) return -INF;
// else {
// std::vector<int> pre(n + 1);
// for (int i = 1; i <= n; ++i) pre[i] = vis[i] + pre[i - 1];
// for (auto [l, r] : stu) if (pre[r] - pre[l - 1] <= 0) return false;
// }
//
// int p = 0;
// while (p < n) {
// for (int x : team) {
// while (p < n && stu[p].second < x) ++p;
// if (p >= n) break
// int r = x;
// while (r) {
// if (p >= n) return false;
// }
// }
// }
// reverse(team.begin(), team.end());
// int cnt = team.size();
// std::vector<int> pre(cnt + 1);
// for (int i = 1; i <= cnt; ++i) {
// pre[i] = pre[i - 1] + team[i - 1];
// }
//
// std::vector<std::pair<int, int> > interval;
// for (int i = 0, l = 0, r = 0; i < n; ++i) {
// while (l <= cnt && team[l + 1] < stu[i].first) ++l;
// if (l > cnt) return -INF;
//
// while (r + 1 <= cnt && team[r + 1] <= stu[i].second) ++r;
// interval.emplace_back(std::make_pair(pre[l - 1] + 1, pre[r]));
// }
//
// for (int i = 1; i <= n; ++i) {
// if (interval[i - 1].second > i) return -INF;
// }
reverse(team.begin(), team.end());
for (int i = 0, p = 0, c = 0; i < n; ++i) {
if (stu[i].first > team[p] || stu[i].second < team[p]) return -INF;
++c;
if (c >= team[p]) ++p, c = 0;
}
return nans;
};
for (auto vec : divide) ans = std::max(ans, Solve(vec));
if (ans <= -INF) std::cout << "impossible\n";
else std::cout << ans << '\n';
}
signed main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
charming();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3788kb
input:
3 2 3 1 2 2 2 4 5 100
output:
9
result:
ok single line: '9'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3564kb
input:
3 1 3 3 3 2 3 1 1 100
output:
100
result:
ok single line: '100'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3632kb
input:
2 1 1 2 2 1 1
output:
impossible
result:
ok single line: 'impossible'
Test #4:
score: 0
Accepted
time: 0ms
memory: 3860kb
input:
3 2 3 1 2 2 2 -100 -200 100000
output:
-300
result:
ok single line: '-300'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3860kb
input:
9 1 4 2 5 3 4 1 5 1 1 2 5 3 5 1 3 1 1 1 1 1 1 1 1 1 1 1
output:
6
result:
ok single line: '6'
Test #6:
score: 0
Accepted
time: 0ms
memory: 3580kb
input:
14 3 3 1 2 2 3 2 3 2 3 1 1 2 3 1 3 3 3 1 3 1 3 1 2 2 3 1 3 -9807452 -9610069 4156341 2862447 6969109 -7245265 -2653530 -5655094 6467527 -6872459 3971784 7312155 9766298 -2719573
output:
-16558567
result:
ok single line: '-16558567'
Test #7:
score: -100
Wrong Answer
time: 0ms
memory: 3648kb
input:
14 1 2 1 4 2 3 3 5 4 5 2 5 2 4 2 4 1 2 3 4 1 5 2 4 1 1 4 5 -13763 -7354207 1096407 -9063321 -4824546 -6275546 1258145 -5272834 -8631107 3581157 2320771 -7714508 8446625 -6816167
output:
-6925559
result:
wrong answer 1st lines differ - expected: '-2673021', found: '-6925559'