Submission #389560
Source Code Expand
#include <cstdio>
#include <bitset>
#include <algorithm>
#include <vector>
#include <cassert>
using namespace std;
int N, K, A, B;
int Xi[606];
bitset<180001> bs[606];
int d1[180001], d2[180001];
bitset<180001> memo[31][301];
const int W = 20;
vector<int> restore(int sum)
{
vector<int> ret;
int loc = N, rem = K;
while (loc) {
int step = loc % W;
if (step == 0) step = W;
int rt = loc - step;
for (int i = 0; i < (1 << step); ++i) {
int tot = 0, cnt = __builtin_popcount(i);
for (int j = 0; j < step; ++j) if (i & (1 << j)) tot += Xi[rt + j];
if (rem >= cnt && sum >= tot && rem - cnt <= rt && memo[rt / W][rem - cnt][sum - tot]) {
rem -= cnt;
sum -= tot;
for (int j = 0; j < step; ++j) if (i & (1 << j)) {
ret.push_back(rt + j);
}
goto nex;
}
}
fprintf(stderr, "><");
break;
nex:
loc -= step;
}
sort(ret.begin(), ret.end());
return ret;
}
int main()
{
scanf("%d%d%d%d", &N, &K, &A, &B);
for (int i = 0; i < N; ++i) scanf("%d", Xi + i);
bs[0].set(0);
if (K <= N / 2) {
for (int i = 0; i <= N; ++i) {
if (i % W == 0) {
for (int j = 0; j <= K; ++j) memo[i / W][j] = bs[j];
}
if (i == N) break;
for (int j = K; j >= 1; --j) bs[j] |= bs[j - 1] << Xi[i];
}
for (int i = 0; i <= 180000; ++i) d1[i] = d2[i] = 10000000;
for (int i = 0; i <= 180000; ++i) if ((int)bs[K][i]) d1[i] = d2[i] = 0;
for (int i = 1; i <= 180000; ++i) d1[i] = min(d1[i], d1[i - 1] + 1);
for (int i = 179999; i >= 0; --i) d2[i] = min(d2[i], d2[i + 1] + 1);
pair<int, int> ret = make_pair(-114514, 0);
for (int i = A; i <= B; ++i) ret = max(ret, make_pair(min(d1[i], d2[i]), -i));
printf("%d\n", -ret.second);
int finder;
int s = ret.second * -1;
if (d1[s] > d2[s]) finder = s + d2[s];
else finder = s - d1[s];
vector<int> res = restore(finder);
for (int i = 0; i < res.size(); ++i) {
if (i > 0) printf(" ");
printf("%d", res[i] + 1);
}
puts("");
} else {
K = N - K;
int total = 0;
for (int i = 0; i < N; ++i) total += Xi[i];
for (int i = 0; i <= N; ++i) {
if (i % W == 0) {
for (int j = 0; j <= K; ++j) memo[i / W][j] = bs[j];
}
if (i == N) break;
for (int j = K; j >= 1; --j) bs[j] |= bs[j - 1] << Xi[i];
}
for (int i = 0; i <= 180000; ++i) d1[i] = d2[i] = 10000000;
for (int i = 0; i <= 180000; ++i) if ((int)bs[K][i] && 0 <= total - i && total - i <= 180000) d1[total - i] = d2[total - i] = 0;
for (int i = 1; i <= 180000; ++i) d1[i] = min(d1[i], d1[i - 1] + 1);
for (int i = 179999; i >= 0; --i) d2[i] = min(d2[i], d2[i + 1] + 1);
pair<int, int> ret = make_pair(-114514, 0);
for (int i = A; i <= B; ++i) ret = max(ret, make_pair(min(d1[i], d2[i]), -i));
printf("%d\n", -ret.second);
int finder;
int s = ret.second * -1;
if (d1[s] > d2[s]) finder = s + d2[s];
else finder = s - d1[s];
finder = total - finder;
vector<int> res = restore(finder);
bool a[6000];
for (int i = 0; i < N; ++i) a[i] = false;
for (int i = 0; i < res.size(); ++i) a[res[i]] = true;
bool u = false;
for (int i = 0; i < N; ++i) if (!a[i]) {
if (u) printf(" ");
u = true;
printf("%d", i + 1);
}
puts("");
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | B - Card Game Strategy |
| User | Operasan |
| Language | C++11 (GCC 4.9.2) |
| Score | 100 |
| Code Size | 3298 Byte |
| Status | AC |
| Exec Time | 4691 ms |
| Memory | 220796 KiB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:48:35: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d%d", &N, &K, &A, &B);
^
./Main.cpp:49:49: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for (int i = 0; i < N; ++i) scanf("%d", Xi + i);
^
Judge Result
| Set Name | All | ||
|---|---|---|---|
| Score / Max Score | 100 / 100 | ||
| Status |
|
| Set Name | Test Cases |
|---|---|
| All | 00_sample_00, 00_sample_01, 10_minirandom_00, 10_minirandom_01, 10_minirandom_02, 10_minirandom_03, 10_minirandom_04, 10_minirandom_05, 10_minirandom_06, 10_minirandom_07, 10_minirandom_08, 10_minirandom_09, 30_barabara_00, 30_barabara_01, 30_barabara_02, 30_barabara_03, 30_barabara_04, 30_barabara_05, 30_barabara_06, 30_barabara_07, 30_barabara_08, 30_barabara_09, 40_maxrandom_00, 40_maxrandom_01, 40_maxrandom_02, 40_maxrandom_03, 40_maxrandom_04, 40_maxrandom_05, 40_maxrandom_06, 40_maxrandom_07, 40_maxrandom_08, 40_maxrandom_09, 40_maxrandom_10, 40_maxrandom_11, 40_maxrandom_12, 40_maxrandom_13, 40_maxrandom_14, 40_maxrandom_15, 40_maxrandom_16, 40_maxrandom_17, 40_maxrandom_18, 40_maxrandom_19, 70_sparse_00, 70_sparse_01, 70_sparse_02, 70_sparse_03, 80_max_00, 80_max_01, 85_large_00, 85_large_01, 85_large_02, 85_large_03, 85_large_04, 85_large_05, 85_large_06, 85_large_07 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00_sample_00 | AC | 384 ms | 220768 KiB |
| 00_sample_01 | AC | 388 ms | 220764 KiB |
| 10_minirandom_00 | AC | 388 ms | 220724 KiB |
| 10_minirandom_01 | AC | 386 ms | 220720 KiB |
| 10_minirandom_02 | AC | 386 ms | 220728 KiB |
| 10_minirandom_03 | AC | 387 ms | 220724 KiB |
| 10_minirandom_04 | AC | 384 ms | 220764 KiB |
| 10_minirandom_05 | AC | 388 ms | 220768 KiB |
| 10_minirandom_06 | AC | 387 ms | 220724 KiB |
| 10_minirandom_07 | AC | 390 ms | 220772 KiB |
| 10_minirandom_08 | AC | 398 ms | 220772 KiB |
| 10_minirandom_09 | AC | 387 ms | 220764 KiB |
| 30_barabara_00 | AC | 1380 ms | 220728 KiB |
| 30_barabara_01 | AC | 585 ms | 220720 KiB |
| 30_barabara_02 | AC | 580 ms | 220724 KiB |
| 30_barabara_03 | AC | 1263 ms | 220724 KiB |
| 30_barabara_04 | AC | 524 ms | 220720 KiB |
| 30_barabara_05 | AC | 957 ms | 220724 KiB |
| 30_barabara_06 | AC | 636 ms | 220728 KiB |
| 30_barabara_07 | AC | 516 ms | 220728 KiB |
| 30_barabara_08 | AC | 1613 ms | 220768 KiB |
| 30_barabara_09 | AC | 1418 ms | 220728 KiB |
| 40_maxrandom_00 | AC | 3606 ms | 220728 KiB |
| 40_maxrandom_01 | AC | 3089 ms | 220728 KiB |
| 40_maxrandom_02 | AC | 768 ms | 220712 KiB |
| 40_maxrandom_03 | AC | 1139 ms | 220724 KiB |
| 40_maxrandom_04 | AC | 1584 ms | 220728 KiB |
| 40_maxrandom_05 | AC | 2823 ms | 220768 KiB |
| 40_maxrandom_06 | AC | 3080 ms | 220724 KiB |
| 40_maxrandom_07 | AC | 3329 ms | 220796 KiB |
| 40_maxrandom_08 | AC | 4352 ms | 220728 KiB |
| 40_maxrandom_09 | AC | 2282 ms | 220772 KiB |
| 40_maxrandom_10 | AC | 1952 ms | 220728 KiB |
| 40_maxrandom_11 | AC | 3634 ms | 220724 KiB |
| 40_maxrandom_12 | AC | 3390 ms | 220744 KiB |
| 40_maxrandom_13 | AC | 3527 ms | 220784 KiB |
| 40_maxrandom_14 | AC | 1944 ms | 220724 KiB |
| 40_maxrandom_15 | AC | 1211 ms | 220720 KiB |
| 40_maxrandom_16 | AC | 679 ms | 220724 KiB |
| 40_maxrandom_17 | AC | 1212 ms | 220756 KiB |
| 40_maxrandom_18 | AC | 621 ms | 220760 KiB |
| 40_maxrandom_19 | AC | 3063 ms | 220736 KiB |
| 70_sparse_00 | AC | 390 ms | 220728 KiB |
| 70_sparse_01 | AC | 391 ms | 220776 KiB |
| 70_sparse_02 | AC | 452 ms | 220728 KiB |
| 70_sparse_03 | AC | 479 ms | 220728 KiB |
| 80_max_00 | AC | 387 ms | 220728 KiB |
| 80_max_01 | AC | 491 ms | 220724 KiB |
| 85_large_00 | AC | 2254 ms | 220728 KiB |
| 85_large_01 | AC | 1149 ms | 220728 KiB |
| 85_large_02 | AC | 2701 ms | 220728 KiB |
| 85_large_03 | AC | 1194 ms | 220756 KiB |
| 85_large_04 | AC | 3573 ms | 220728 KiB |
| 85_large_05 | AC | 1475 ms | 220728 KiB |
| 85_large_06 | AC | 4691 ms | 220760 KiB |
| 85_large_07 | AC | 1680 ms | 220720 KiB |