QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#374888 | #8313. Nim Cheater | PetroTarnavskyi# | ML | 200ms | 6644kb | C++20 | 1.9kb | 2024-04-02 19:16:51 | 2024-04-02 19:16:53 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, a, b) for(int i = (a); i < (b); i++)
#define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--)
#define SZ(a) int(a.size())
#define ALL(a) a.begin(), a.end()
#define PB push_back
#define MP make_pair
#define F first
#define S second
typedef long long LL;
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef double db;
const int LEN = 1 << 14;
const int LOG = 17;
int dp[LOG][LEN];
const int N = 20'447;
const int INF = 1e9 + 47;
VI g[N];
int q[2 * N];
int ans[N];
int c[N];
int val[N];
int idx[N];
int cnt[N];
set<int> ind;
int sz = 1;
void recalc(int i, int j, int v)
{
FOR (k, 0, LEN)
{
dp[i][k] = min(dp[j][k], dp[j][k ^ c[v]] + val[v]);
}
}
void dfsSZ(int v)
{
cnt[v] = 1;
for (auto to : g[v])
{
dfsSZ(to);
cnt[v] += cnt[to];
}
}
void dfsSolve(int v, int xr = 0)
{
ans[v] = dp[idx[v]][xr];
if (g[v].empty())
return;
sort(ALL(g[v]), [&](int i, int j)
{
return cnt[i] < cnt[j];
});
int id = idx[v];
FOR (i, 0, SZ(g[v]) - 1)
{
int to = g[v][i];
idx[to] = *ind.begin();
ind.erase(idx[to]);
recalc(idx[to], id, to);
dfsSolve(to, xr ^ c[to]);
ind.insert(idx[to]);
}
int to = g[v].back();
idx[to] = *ind.begin();
ind.erase(idx[to]);
recalc(idx[to], id, to);
ind.insert(id);
dfsSolve(to, xr ^ c[to]);
ind.insert(idx[to]);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cerr << sizeof(dp) << '\n';
int n;
cin >> n;
stack<int> s;
s.push(0);
FOR (i, 0, n)
{
string t;
cin >> t;
if (t == "ADD")
{
cin >> c[sz] >> val[sz];
g[s.top()].PB(sz);
s.push(sz);
sz++;
}
else
{
s.pop();
}
q[i] = s.top();
}
idx[0] = 0;
fill(dp[0] + 1, dp[0] + LEN, INF);
FOR (i, 1, LOG)
ind.insert(i);
dfsSZ(0);
dfsSolve(0);
FOR (i, 0, n)
{
cout << ans[q[i]] << '\n';
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3648kb
input:
7 ADD 3 10 ADD 2 4 ADD 1 5 ADD 2 1 DEL DEL ADD 3 5
output:
10 14 0 1 0 14 4
result:
ok 7 lines
Test #2:
score: 0
Accepted
time: 11ms
memory: 3944kb
input:
1964 ADD 3004 35344 ADD 6315 69182 ADD 59 78550 ADD 13842 11063 ADD 6255 35962 DEL ADD 13953 33214 ADD 5693 55297 ADD 1056 32685 ADD 13524 45844 ADD 5495 63087 ADD 2963 5957 ADD 7390 51487 ADD 9194 77728 DEL ADD 1958 85909 DEL ADD 6060 26702 ADD 13745 1556 ADD 6128 21684 ADD 9177 98957 ADD 670 35242...
output:
35344 104526 183076 194139 230101 194139 227353 282650 315335 361179 424266 430223 481710 559438 481710 567619 481710 508412 162159 116769 187943 223185 242421 197906 242421 223185 187943 229832 187943 116769 120079 116769 210895 285394 318251 289823 262181 181352 158554 173334 194467 164418 80520 1...
result:
ok 1964 lines
Test #3:
score: 0
Accepted
time: 41ms
memory: 4440kb
input:
7986 ADD 10406 26679 ADD 1401 27753 ADD 3444 55478 ADD 6593 46697 ADD 9685 65960 DEL ADD 3648 11140 ADD 16095 24779 ADD 13199 77124 ADD 7845 42450 ADD 1443 27223 ADD 1147 39482 ADD 1320 25463 ADD 3109 1151 ADD 4171 63655 ADD 10331 20910 ADD 15317 63454 DEL ADD 15015 24513 ADD 10375 61674 DEL ADD 154...
output:
26679 54432 109910 156607 222567 156607 167747 192526 269650 312100 339323 378805 404268 405419 469074 201286 221814 201286 215335 164148 215335 267670 257274 148187 257274 267670 215335 234875 208773 142219 165828 164356 154574 154951 135963 108003 130246 108003 123985 114500 155980 93201 123616 12...
result:
ok 7986 lines
Test #4:
score: 0
Accepted
time: 200ms
memory: 5692kb
input:
39990 ADD 901 53966 ADD 6801 83248 ADD 10537 9950 ADD 4921 30343 DEL DEL DEL ADD 10718 82644 ADD 15697 75103 ADD 11322 54295 DEL DEL DEL ADD 2233 72418 ADD 10998 41706 ADD 5737 78664 ADD 16315 46965 DEL DEL ADD 2384 37544 ADD 15091 57756 ADD 7778 94748 DEL ADD 8859 11993 DEL DEL ADD 14804 66995 DEL ...
output:
53966 137214 147164 177507 147164 137214 53966 136610 211713 266008 211713 136610 53966 126384 168090 246754 293719 246754 168090 205634 263390 358138 263390 275383 263390 205634 272629 205634 168090 196095 196843 196095 280408 361710 385439 446884 480125 567459 480125 446884 496616 539871 496616 53...
result:
ok 39990 lines
Test #5:
score: 0
Accepted
time: 200ms
memory: 6644kb
input:
40000 ADD 10576 91165 ADD 280 27659 ADD 16277 58624 DEL DEL ADD 10612 21196 ADD 8276 25617 ADD 6839 51946 ADD 1074 24294 DEL DEL ADD 3349 23238 ADD 15144 14483 ADD 6206 79807 ADD 3547 87060 ADD 1087 97537 ADD 10122 60220 ADD 10091 61757 ADD 12920 66201 ADD 4096 73520 ADD 7923 31010 ADD 10470 36374 A...
output:
91165 118824 177448 118824 91165 112361 137978 189924 214218 189924 137978 161216 175699 255506 342566 440103 500323 562080 628281 701801 732811 349599 237033 181301 222463 126421 161218 167338 213886 167338 191789 167338 190911 168525 166940 171519 167339 171519 138349 66779 121547 125082 107235 12...
result:
ok 40000 lines
Test #6:
score: -100
Memory Limit Exceeded
input:
40000 ADD 16016 67003 ADD 949 48982 ADD 5774 23423 ADD 2088 79159 ADD 7311 11147 ADD 16156 39724 ADD 12066 41131 ADD 10620 3205 ADD 1281 54740 ADD 16171 64821 ADD 11967 71149 ADD 7965 35031 ADD 12260 34240 ADD 4447 86355 ADD 951 31740 ADD 16068 71786 ADD 6666 39872 ADD 4459 71463 ADD 9739 41904 ADD ...
output:
67003 115985 139408 218567 229714 269438 310569 313774 368514 433335 504484 270078 304318 390673 302368 374154 238684 310147 258689 259943 232059 233390 267158 196962 254789 189023 132045 140520 73149 133065 154075 171949 145270 151883 152603 160200 68753 115487 111385 85840 82635 84013 137862 14201...