QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#511590 | #8529. Balance of Permutation | UNos_maricones | AC ✓ | 258ms | 94356kb | C++20 | 2.3kb | 2024-08-10 04:49:20 | 2024-08-10 04:49:20 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define pb push_back
typedef long long ll;
typedef long double lf;
typedef pair <ll,ll> pii;
const ll N = 35;
const ll S = 2010;
const ll LOG_N = 18;
const ll oo = 1e16+7;
const ll mod = 2e9 + 7;
__int128 dp[2][N][N][2 * N * N + 5];
int cnt[2][N][N][2 * N * N + 5];
int pas[2][N];
int many[2][N];
__int128 k = 0;
int idx = 0;
int n, b;
__int128 go (int flag, int i, int j, int bal) {
if (i == n) {
if (j == 0 && bal == b) return 1;
return 0;
}
auto &rf = dp[flag][i][j][bal + N * N];
if (cnt[flag][i][j][bal + N * N] == idx) return rf;
cnt[flag][i][j][bal + N * N] = idx;
if (pas[flag][i]) return rf = go(flag ^ 1, i + flag, j, bal);
if (flag == 0) {
int unmatch = (i ? many[1][i - 1] - (many[0][i - 1] - j) : 0);
rf = go(1, i, j + 1, bal - i);
if (unmatch) {
__int128 add = k;
if (go(1, i, j, bal + i) <= k / unmatch)
add = go(1, i, j, bal + i) * unmatch;
if (rf <= k - add)
rf += add;
else rf = k;
}
}
else {
rf = go(0, i + 1, j, bal - i);
if (j) {
__int128 add = k;
if (go(0, i + 1, j - 1, bal + i) <= k / j)
add = go(0, i + 1, j - 1, bal + i) * j;
if (rf <= k - add)
rf += add;
else rf = k;
}
}
return rf;
}
int main () {
#ifdef LOCAL
freopen("input.txt","r",stdin);
#endif
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> b;
string s; cin >> s;
for (int i = 0; i < s.size(); ++i)
k = 10 * k + s[i] - '0';
vector <int> ans;
vector <int> visi(n, 0);
for (int i = 0; i < n; ++i) {
pas[1][i] = 1;
for (int j = 0; j < n; ++j) {
if (visi[j]) continue;
idx++;
pas[0][j] = 1;
b -= abs(j - i);
for (int flag = 0; flag < 2; ++flag) {
for (int h = 0; h < n; ++h) {
many[flag][h] = 1 - pas[flag][h];
if (h) many[flag][h] += many[flag][h - 1];
}
}
if (go(0, 0, 0, 0) >= k) {
ans.pb(j + 1);
visi[j] = 1;
break;
}
else k -= go(0, 0, 0, 0);
b += abs(j - i);
pas[0][j] = 0;
}
}
for (auto &e : ans) cout << e << " ";
cout << '\n';
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 20064kb
input:
6 6 6
output:
1 2 6 3 4 5
result:
ok 6 numbers
Test #2:
score: 0
Accepted
time: 80ms
memory: 89808kb
input:
30 300 3030303030303030303030
output:
1 2 3 4 9 23 20 28 24 16 21 17 27 29 8 26 25 30 19 18 22 12 7 13 6 10 5 15 14 11
result:
ok 30 numbers
Test #3:
score: 0
Accepted
time: 1ms
memory: 7632kb
input:
1 0 1
output:
1
result:
ok 1 number(s): "1"
Test #4:
score: 0
Accepted
time: 0ms
memory: 11812kb
input:
2 0 1
output:
1 2
result:
ok 2 number(s): "1 2"
Test #5:
score: 0
Accepted
time: 2ms
memory: 11840kb
input:
2 2 1
output:
2 1
result:
ok 2 number(s): "2 1"
Test #6:
score: 0
Accepted
time: 0ms
memory: 20016kb
input:
5 8 3
output:
1 5 4 2 3
result:
ok 5 number(s): "1 5 4 2 3"
Test #7:
score: 0
Accepted
time: 0ms
memory: 24292kb
input:
7 20 100
output:
3 6 7 4 1 5 2
result:
ok 7 numbers
Test #8:
score: 0
Accepted
time: 0ms
memory: 24284kb
input:
7 2 6
output:
2 1 3 4 5 6 7
result:
ok 7 numbers
Test #9:
score: 0
Accepted
time: 0ms
memory: 24304kb
input:
7 24 1
output:
4 5 6 7 1 2 3
result:
ok 7 numbers
Test #10:
score: 0
Accepted
time: 0ms
memory: 24260kb
input:
7 22 360
output:
7 6 4 3 5 2 1
result:
ok 7 numbers
Test #11:
score: 0
Accepted
time: 3ms
memory: 24268kb
input:
7 20 358
output:
5 7 2 4 6 3 1
result:
ok 7 numbers
Test #12:
score: 0
Accepted
time: 0ms
memory: 32660kb
input:
10 48 10001
output:
7 5 8 9 6 10 3 4 1 2
result:
ok 10 numbers
Test #13:
score: 0
Accepted
time: 0ms
memory: 32640kb
input:
10 42 10101
output:
3 9 6 8 10 5 7 2 1 4
result:
ok 10 numbers
Test #14:
score: 0
Accepted
time: 50ms
memory: 78216kb
input:
25 300 1
output:
7 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 8 9 10 11 12 13
result:
ok 25 numbers
Test #15:
score: 0
Accepted
time: 87ms
memory: 76524kb
input:
25 300 283788388040048639877
output:
25 24 23 22 21 20 19 18 17 16 11 12 13 14 15 10 9 8 7 5 6 4 2 1 3
result:
ok 25 numbers
Test #16:
score: 0
Accepted
time: 83ms
memory: 76480kb
input:
26 302 105773752969551707419545
output:
19 22 25 13 17 18 23 20 10 26 16 6 5 11 14 12 24 4 3 21 1 15 7 8 2 9
result:
ok 26 numbers
Test #17:
score: 0
Accepted
time: 100ms
memory: 80796kb
input:
27 308 8781128321749037280676555
output:
16 18 17 21 25 6 20 24 22 15 27 5 7 8 2 9 26 13 1 3 14 10 23 19 4 11 12
result:
ok 27 numbers
Test #18:
score: 0
Accepted
time: 99ms
memory: 89336kb
input:
28 304 806517199954337651602356955
output:
12 17 5 16 23 26 25 15 20 2 19 7 22 24 6 13 11 10 28 8 1 21 18 14 27 3 4 9
result:
ok 28 numbers
Test #19:
score: 0
Accepted
time: 151ms
memory: 89656kb
input:
29 322 40281026669581503094652149519
output:
16 21 10 25 17 29 9 28 2 8 26 27 22 4 3 5 18 14 19 1 23 20 15 11 13 7 6 12 24
result:
ok 29 numbers
Test #20:
score: 0
Accepted
time: 215ms
memory: 94056kb
input:
30 400 46479902466857426153849991132
output:
25 19 30 29 9 20 26 21 14 27 28 10 22 11 24 2 7 4 18 17 5 13 12 6 8 1 15 23 16 3
result:
ok 30 numbers
Test #21:
score: 0
Accepted
time: 195ms
memory: 90096kb
input:
30 450 1140008168482799670544355
output:
26 16 17 18 19 20 21 22 23 24 25 27 28 29 30 1 2 3 5 9 4 8 14 10 6 11 12 15 7 13
result:
ok 30 numbers
Test #22:
score: 0
Accepted
time: 85ms
memory: 92108kb
input:
30 150 480087379811286955791425915
output:
7 4 8 5 16 3 1 12 13 11 9 10 15 25 18 17 20 30 28 2 6 14 23 21 24 26 27 22 19 29
result:
ok 30 numbers
Test #23:
score: 0
Accepted
time: 67ms
memory: 91812kb
input:
30 150 480087379811286955791439470
output:
7 4 8 5 16 3 1 12 13 11 9 10 15 25 18 17 20 30 28 2 19 6 22 24 21 23 26 14 29 27
result:
ok 30 numbers
Test #24:
score: 0
Accepted
time: 218ms
memory: 94356kb
input:
30 440 41509275104334759322587324
output:
22 23 20 24 18 30 19 26 21 28 4 29 17 25 27 16 3 1 2 5 8 13 10 15 7 12 9 14 11 6
result:
ok 30 numbers
Test #25:
score: 0
Accepted
time: 197ms
memory: 92072kb
input:
30 450 1140008168482800727111311
output:
26 16 17 18 19 20 21 22 23 24 25 27 28 29 30 1 2 5 7 14 4 15 8 11 3 13 10 9 6 12
result:
ok 30 numbers
Test #26:
score: 0
Accepted
time: 240ms
memory: 90016kb
input:
30 400 52289890275214604423031772929
output:
26 27 29 21 28 16 18 11 2 25 24 23 6 30 20 13 17 10 15 4 9 12 8 22 19 1 5 7 3 14
result:
ok 30 numbers
Test #27:
score: 0
Accepted
time: 19ms
memory: 89744kb
input:
30 0 1
output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
result:
ok 30 numbers
Test #28:
score: 0
Accepted
time: 181ms
memory: 94028kb
input:
30 450 1
output:
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
result:
ok 30 numbers
Test #29:
score: 0
Accepted
time: 258ms
memory: 90160kb
input:
30 450 1710012252724199424000000
output:
30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
result:
ok 30 numbers
Test #30:
score: 0
Accepted
time: 249ms
memory: 92148kb
input:
30 450 1692383260428073656742269
output:
30 27 26 28 18 29 21 19 25 17 20 16 24 22 23 7 13 4 6 3 5 12 1 15 14 9 11 8 2 10
result:
ok 30 numbers
Test #31:
score: 0
Accepted
time: 255ms
memory: 90132kb
input:
30 302 5918364042599361729860937331200
output:
30 29 28 27 26 25 14 8 9 10 11 12 13 7 15 16 17 18 19 20 21 22 23 24 6 5 4 3 2 1
result:
ok 30 numbers
Test #32:
score: 0
Accepted
time: 122ms
memory: 94088kb
input:
30 254 2256781660157136563723839089600
output:
25 2 3 12 7 16 19 8 22 6 11 17 27 26 10 24 15 21 20 18 28 9 30 23 14 13 5 29 4 1
result:
ok 30 numbers
Test #33:
score: 0
Accepted
time: 217ms
memory: 92116kb
input:
30 448 3131906441000512625049600
output:
23 20 28 18 26 30 19 29 27 22 17 24 21 25 2 13 16 15 14 12 11 10 9 8 7 6 5 4 3 1
result:
ok 30 numbers
Test #34:
score: 0
Accepted
time: 15ms
memory: 91792kb
input:
30 2 20
output:
1 2 3 4 5 6 7 8 9 11 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
result:
ok 30 numbers
Test #35:
score: 0
Accepted
time: 23ms
memory: 93852kb
input:
30 2 29
output:
2 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
result:
ok 30 numbers
Extra Test:
score: 0
Extra Test Passed