QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#49548 | #4412. Boss Rush | Winner | WA | 2042ms | 28936kb | C++11 | 2.4kb | 2022-09-21 22:23:58 | 2022-09-21 22:23:59 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1 << 18;
const int M = 3e6;
const int Q = 1e5 + 20;
int T, n;
ll H, sum[20][Q];
bool dp[N];
int t[Q], len[Q];
vector<ll> node[20];
struct LINE{
int l, r;
ll sum;
}line[N];
bool cmp(int x, int y){
return len[x] - t[x] > len[y] - t[y];
}
bool findans(int x, int y, ll mid){
ll res = line[x].sum;
int asd = min((ll)node[y].size() - 1, mid - line[x].l);
res += sum[y][asd];
return res >= H;
}
bool findlen(int x, ll mid){
return line[x].r <= mid;
}
bool check(int mid){
for(int i = 0; i < 1 << n; i++){
dp[i] = false;
}
dp[0] = true;
for(int i = 1; i < 1 << n; i++){
for(int j = 0; j < n; j++){
if(i >> j & 1){
int res = i ^ (1 << j);
if(!dp[res]) continue;
if(findans(res, j + 1, mid)) return true;
if(findlen(i, mid)) dp[i] = true;
}
}
}
return false;
}
void init(){
for(ll xx = 0; xx < 1 << n; xx++){
ll x = xx;
ll res = 0;
vector<int> id;
int qwe = 1;
while(x){
if(x & 1){
id.push_back(qwe);
res += sum[qwe][0];
}
x >>= 1;
qwe++;
}
sort(id.begin(), id.end(), cmp);
int l = 0, r = 0;
for(auto it: id){
r = max(r, l + len[it]);
l += t[it];
}
line[xx] = {l, r, res};
}
}
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin >> T;
while(T--){
cin >> n >> H;
init();
for(int i = 1; i <= n; i++){
node[i].clear();
sum[i][0] = sum[i][1] = 0;
cin >> t[i] >> len[i];
for(int j = 1; j <= len[i]; j++){
ll x;
cin >> x;
node[i].push_back(x);
sum[i][0] += x;
if(j == 1) sum[i][1] = x;
else sum[i][j] = sum[i][j - 1] + x;
}
}
int ans = -1;
int l = 1, r = M;
while(l <= r){
int mid = (l + r) / 2;
if(check(mid)){
ans = mid;
r = mid - 1;
}
else l = mid + 1;
}
if(ans != - 1) ans --;
cout << ans << endl;
}
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 2042ms
memory: 28936kb
input:
100 10 293367178351 89 52 117480172 951737726 356435682 180765874 775623083 281703307 290364363 366421773 989361116 796791408 389709469 534380525 412173405 463001602 578985383 272777986 833157533 444367936 841474617 472532665 952319800 583679381 924952511 892974994 105808118 171375863 320943603 4870...
output:
-1 502 558 302 383 320 308 647 296 593 460 576 442 556 349 612 346 428 387 367 139 165 381 287 251 230 75 128 -1 178 182 287 265 -1 289 119 278 134 302 140 368 145 226 135 386 203 141 337 127 260 382 251 414 302 519 495 138 107 -1 252 273 395 293 404 566 315 362 235 229 -1 138 270 268 522 136 140 48...
result:
wrong answer 1st lines differ - expected: '368', found: '-1'