Submission #70487135
Source Code Expand
// 30 bits, too tight...
import std.conv, std.functional, std.range, std.stdio, std.string;
import std.algorithm, std.array, std.bigint, std.bitmanip, std.complex, std.container, std.math, std.mathspecial, std.numeric, std.regex, std.typecons;
import core.bitop;
class EOFException : Throwable { this() { super("EOF"); } }
string[] tokens;
string readToken() { for (; tokens.empty; ) { if (stdin.eof) { throw new EOFException; } tokens = readln.split; } auto token = tokens.front; tokens.popFront; return token; }
int readInt() { return readToken.to!int; }
long readLong() { return readToken.to!long; }
string COLOR(string s = "") { return "\x1b[" ~ s ~ "m"; }
bool chmin(T)(ref T t, in T f) { if (t > f) { t = f; return true; } else { return false; } }
bool chmax(T)(ref T t, in T f) { if (t < f) { t = f; return true; } else { return false; } }
int binarySearch(alias pred, T)(in T[] as) { int lo = -1, hi = cast(int)(as.length); for (; lo + 1 < hi; ) { const mid = (lo + hi) >> 1; (unaryFun!pred(as[mid]) ? hi : lo) = mid; } return hi; }
int lowerBound(T)(in T[] as, T val) { return as.binarySearch!(a => (a >= val)); }
int upperBound(T)(in T[] as, T val) { return as.binarySearch!(a => (a > val)); }
int lis(const(int[]) as) {
int[] dp;
foreach (a; as) {
const pos = dp.lowerBound(a);
if (pos < dp.length) {
dp[pos] = a;
} else {
dp ~= a;
}
}
return cast(int)(dp.length);
}
alias Ans = Tuple!(int[], "ps", int[], "as");
Ans solveSmall(int N) {
const E = bsr(N) + 1;
auto fs = new int[E];
foreach (i; 1 .. N + 1) ++fs[bsf(i)];
auto cuts = new int[E + 1];
foreach (e; 0 .. E) {
cuts[e + 1] = cuts[e] + (bsr(fs[e]) + 1);
}
int[] ps;
foreach (e; 0 .. E) {
foreach (i; 0 .. fs[e]) {
ps ~= (i + 1) << cuts[e];
}
}
auto as = new int[N + 1];
foreach (k; 1 .. N + 1) {
auto used = new bool[E];
int kk = k;
foreach (e; 0 .. E) {
if (kk >= fs[e]) {
kk -= fs[e];
used[e] = true;
} else {
if (e == 0) kk -= 1;
}
}
assert(kk == 0);
foreach (e; 0 .. E) if (!used[e]) {
as[k] |= (1 << cuts[e + 1]) - (1 << cuts[e]);
}
}
debug {
writeln("N = ", N);
writeln("fs = ", fs);
writeln("ps = ", ps);
writeln("as = ", as);
foreach (p; ps) {
foreach_reverse (e; 0 .. cuts[E]) write(p >> e & 1);
writeln;
}
foreach (k; 1 .. N + 1) {
auto qs = new int[N];
foreach (j; 0 .. N) qs[j] = as[k] | ps[j];
const res = lis(qs);
assert(res == k, format("FAIL %s %s %s", k, res, qs));
}
}
return Ans(ps, as);
}
Ans solve(int N) {
int[] fs;
for (int n = N; n; ) {
const lim = (n + 1) / 2;
const e = bsr(lim);
fs ~= 1 << e;
n -= (1 << e);
}
const E = cast(int)(fs.length);
debug writefln("N = %s: fs = %s", N, fs);
int[] ps;
foreach (e; 0 .. E) {
foreach (i; 0 .. fs[e]) ps ~= fs[0] << e | i;
}
ps.sort;
assert(ps.length == N);
assert(0 <= ps[0]); assert(ps[N - 1] < 2^^30);
auto as = new int[N + 1];
foreach (k; 1 .. N + 1) {
// m ni tsubusu
for (int m = fs[0]; ; m /= 2) {
assert(m);
auto used = new bool[E];
int kk = k;
foreach (e; 0 .. E) {
const f = min(fs[e], m);
if (kk >= f) {
kk -= f;
used[e] = true;
}
}
if (used[0]) {
foreach (e; 0 .. E) if (!used[e]) {
as[k] |= fs[0] << e;
}
foreach (e; bsr(m) .. bsr(fs[0])) {
as[k] |= 1 << e;
}
break;
}
}
}
debug {
/*
writeln("N = ", N);
writeln("fs = ", fs);
writeln("ps = ", ps);
writeln("as = ", as);
const limE = bsr(ps.maxElement) + 1;
foreach (p; ps) {
foreach_reverse (e; 0 .. limE) write(p >> e & 1);
writeln;
}
//*/
foreach (k; 1 .. N + 1) {
auto qs = new int[N];
foreach (j; 0 .. N) qs[j] = as[k] | ps[j];
const res = lis(qs);
assert(res == k, format("FAIL %s %s %s", k, res, qs));
}
}
return Ans(ps, as);
}
void main() {
debug {{
// exper; return;
// exper2; return;
foreach (N; 1 .. 1000 + 1) {
solve(N);
}
}}
try {
for (; ; ) {
const numCases = readInt;
foreach (caseId; 0 .. numCases) {
const N = readInt;
const ans = solve(N);
foreach (i; 0 .. N) {
if (i) write(" ");
write(ans.ps[i]);
}
writeln;
foreach (k; 1 .. N + 1) {
if (k > 1) write(" ");
write(ans.as[k]);
}
writeln;
}
}
} catch (EOFException e) {
}
}
Submission Info
| Submission Time | |
|---|---|
| Task | C - PORALIS |
| User | hos_lyric |
| Language | D (LDC 1.32.2) |
| Score | 900 |
| Code Size | 4839 Byte |
| Status | AC |
| Exec Time | 116 ms |
| Memory | 3840 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 900 / 900 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00-sample-0.txt |
| All | 00-sample-0.txt, 01-00.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt, 01-47.txt, 01-48.txt, 01-49.txt, 01-50.txt, 01-51.txt, 01-52.txt, 01-53.txt, 01-54.txt, 01-55.txt, 01-56.txt, 01-57.txt, 01-58.txt, 01-59.txt, 01-60.txt, 01-61.txt, 01-62.txt, 01-63.txt, 01-64.txt, 01-65.txt, 01-66.txt, 01-67.txt, 01-68.txt, 01-69.txt, 01-70.txt, 01-71.txt, 01-72.txt, 01-73.txt, 01-74.txt, 01-75.txt, 01-76.txt, 01-77.txt, 01-78.txt, 01-79.txt, 01-80.txt, 01-81.txt, 01-82.txt, 01-83.txt, 02-0.txt, 03-0.txt, 03-1.txt, 03-2.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00-sample-0.txt | AC | 1 ms | 2888 KiB |
| 01-00.txt | AC | 2 ms | 3368 KiB |
| 01-01.txt | AC | 2 ms | 3156 KiB |
| 01-02.txt | AC | 2 ms | 3144 KiB |
| 01-03.txt | AC | 2 ms | 3280 KiB |
| 01-04.txt | AC | 2 ms | 2920 KiB |
| 01-05.txt | AC | 2 ms | 3044 KiB |
| 01-06.txt | AC | 2 ms | 3272 KiB |
| 01-07.txt | AC | 2 ms | 3280 KiB |
| 01-08.txt | AC | 2 ms | 3284 KiB |
| 01-09.txt | AC | 2 ms | 3136 KiB |
| 01-10.txt | AC | 2 ms | 3256 KiB |
| 01-11.txt | AC | 1 ms | 3224 KiB |
| 01-12.txt | AC | 2 ms | 3164 KiB |
| 01-13.txt | AC | 2 ms | 3112 KiB |
| 01-14.txt | AC | 1 ms | 3060 KiB |
| 01-15.txt | AC | 2 ms | 3176 KiB |
| 01-16.txt | AC | 1 ms | 3216 KiB |
| 01-17.txt | AC | 2 ms | 3132 KiB |
| 01-18.txt | AC | 2 ms | 3320 KiB |
| 01-19.txt | AC | 2 ms | 3136 KiB |
| 01-20.txt | AC | 2 ms | 3064 KiB |
| 01-21.txt | AC | 2 ms | 2916 KiB |
| 01-22.txt | AC | 2 ms | 3232 KiB |
| 01-23.txt | AC | 2 ms | 2944 KiB |
| 01-24.txt | AC | 1 ms | 3088 KiB |
| 01-25.txt | AC | 2 ms | 3096 KiB |
| 01-26.txt | AC | 2 ms | 3280 KiB |
| 01-27.txt | AC | 2 ms | 3132 KiB |
| 01-28.txt | AC | 2 ms | 3200 KiB |
| 01-29.txt | AC | 2 ms | 3232 KiB |
| 01-30.txt | AC | 2 ms | 3040 KiB |
| 01-31.txt | AC | 2 ms | 3324 KiB |
| 01-32.txt | AC | 2 ms | 3196 KiB |
| 01-33.txt | AC | 2 ms | 3104 KiB |
| 01-34.txt | AC | 2 ms | 3020 KiB |
| 01-35.txt | AC | 1 ms | 3216 KiB |
| 01-36.txt | AC | 2 ms | 2920 KiB |
| 01-37.txt | AC | 2 ms | 3284 KiB |
| 01-38.txt | AC | 2 ms | 3184 KiB |
| 01-39.txt | AC | 2 ms | 3076 KiB |
| 01-40.txt | AC | 2 ms | 3228 KiB |
| 01-41.txt | AC | 2 ms | 3080 KiB |
| 01-42.txt | AC | 1 ms | 3268 KiB |
| 01-43.txt | AC | 2 ms | 3032 KiB |
| 01-44.txt | AC | 1 ms | 3192 KiB |
| 01-45.txt | AC | 2 ms | 3256 KiB |
| 01-46.txt | AC | 2 ms | 3060 KiB |
| 01-47.txt | AC | 1 ms | 3180 KiB |
| 01-48.txt | AC | 3 ms | 3132 KiB |
| 01-49.txt | AC | 2 ms | 3056 KiB |
| 01-50.txt | AC | 2 ms | 3144 KiB |
| 01-51.txt | AC | 2 ms | 3228 KiB |
| 01-52.txt | AC | 2 ms | 3148 KiB |
| 01-53.txt | AC | 2 ms | 3380 KiB |
| 01-54.txt | AC | 2 ms | 3068 KiB |
| 01-55.txt | AC | 2 ms | 3212 KiB |
| 01-56.txt | AC | 2 ms | 3032 KiB |
| 01-57.txt | AC | 2 ms | 3048 KiB |
| 01-58.txt | AC | 1 ms | 3272 KiB |
| 01-59.txt | AC | 2 ms | 3176 KiB |
| 01-60.txt | AC | 1 ms | 3036 KiB |
| 01-61.txt | AC | 2 ms | 3020 KiB |
| 01-62.txt | AC | 1 ms | 3128 KiB |
| 01-63.txt | AC | 2 ms | 3192 KiB |
| 01-64.txt | AC | 2 ms | 3252 KiB |
| 01-65.txt | AC | 2 ms | 3112 KiB |
| 01-66.txt | AC | 2 ms | 3052 KiB |
| 01-67.txt | AC | 2 ms | 3272 KiB |
| 01-68.txt | AC | 2 ms | 3244 KiB |
| 01-69.txt | AC | 2 ms | 3208 KiB |
| 01-70.txt | AC | 2 ms | 3228 KiB |
| 01-71.txt | AC | 2 ms | 3168 KiB |
| 01-72.txt | AC | 2 ms | 3164 KiB |
| 01-73.txt | AC | 2 ms | 3256 KiB |
| 01-74.txt | AC | 2 ms | 3244 KiB |
| 01-75.txt | AC | 1 ms | 3152 KiB |
| 01-76.txt | AC | 2 ms | 3212 KiB |
| 01-77.txt | AC | 2 ms | 3252 KiB |
| 01-78.txt | AC | 2 ms | 2908 KiB |
| 01-79.txt | AC | 2 ms | 3100 KiB |
| 01-80.txt | AC | 2 ms | 3240 KiB |
| 01-81.txt | AC | 2 ms | 3352 KiB |
| 01-82.txt | AC | 2 ms | 3132 KiB |
| 01-83.txt | AC | 2 ms | 3388 KiB |
| 02-0.txt | AC | 6 ms | 3180 KiB |
| 03-0.txt | AC | 116 ms | 3840 KiB |
| 03-1.txt | AC | 86 ms | 3824 KiB |
| 03-2.txt | AC | 79 ms | 3836 KiB |