Submission #3324842
Source Code Expand
void main() { import std.stdio, std.string, std.conv, std.algorithm; long a; int k; rd(a, k); long _a = a; int[] n; while (_a) { n = (_a % 10) ~ n; _a /= 10; } long maa() { // a以下の最大の整数 import core.bitop : popcnt; auto dp = new long[][][][](n.length + 1, 2, 2, 1 << 10); foreach (i; 0 .. (n.length + 1)) { foreach (bit; 0 .. (1 << 10)) { dp[i][0][0][bit] = -1; dp[i][0][1][bit] = -1; dp[i][1][0][bit] = -1; dp[i][1][1][bit] = -1; } } dp[0][0][0][0] = 0; // ? void chmax(ref long l, long r) { l = max(l, r); } foreach (i; 0 .. n.length) { foreach (l; 0 .. 2) { foreach (z; 0 .. 2) { foreach (b; 0 .. (1 << 10)) { if (dp[i][l][z][b] >= 0) { auto d = l ? 9 : n[i]; for (int digit = 0; digit <= d; digit++) { auto less = l || (digit < d); auto zero = z || (digit > 0); auto bit = !zero ? 0 : (b | (1 << digit)); chmax(dp[i + 1][less][zero][bit], dp[i][l][z][b] * 10 + digit); } } } } } } long ret = 0; foreach (bit; 0 .. (1 << 10)) { if (popcnt(bit) <= k) { chmax(ret, dp[n.length][0][0][bit]); chmax(ret, dp[n.length][0][1][bit]); chmax(ret, dp[n.length][1][0][bit]); chmax(ret, dp[n.length][1][1][bit]); } } return ret; } long mia() { // a以上の最小の整数 import core.bitop : popcnt; auto dp = new long[][][][](n.length + 1, 2, 2, 1 << 10); const long inf = 10L ^^ 18; foreach (i; 0 .. (n.length + 1)) { foreach (bit; 0 .. (1 << 10)) { dp[i][0][0][bit] = inf; dp[i][0][1][bit] = inf; dp[i][1][0][bit] = inf; dp[i][1][1][bit] = inf; } } dp[0][0][0][0] = 0; // ?? void chmin(ref long l, long r) { l = min(l, r); } foreach (i; 0 .. n.length) { foreach (g; 0 .. 2) { foreach (z; 0 .. 2) { foreach (b; 0 .. (1 << 10)) { if (dp[i][g][z][b] < inf) { auto d = g ? 0 : n[i]; for (int digit = d; digit < 10; digit++) { auto greater = g || (digit > d); auto zero = z || (digit > 0); auto bit = !zero ? 0 : (b | (1 << digit)); chmin(dp[i + 1][greater][zero][bit], dp[i][g][z][b] * 10 + digit); } } } } } } long ret = inf; foreach (bit; 0 .. (1 << 10)) { if (popcnt(bit) <= k) { chmin(ret, dp[n.length][0][0][bit]); chmin(ret, dp[n.length][0][1][bit]); chmin(ret, dp[n.length][1][0][bit]); chmin(ret, dp[n.length][1][1][bit]); } } return ret; } writeln(min(a - maa(), mia() - a)); } void rd(T...)(ref T x) { import std.stdio : readln; import std.string : split; import std.conv : to; auto l = readln.split; assert(l.length == x.length); foreach (i, ref e; x) e = l[i].to!(typeof(e)); }
Submission Info
Submission Time | |
---|---|
Task | D - 壊れた電卓 |
User | ikd |
Language | D (DMD64 v2.070.1) |
Score | 100 |
Code Size | 3226 Byte |
Status | AC |
Exec Time | 4 ms |
Memory | 3708 KB |
Judge Result
Set Name | sub | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 30 / 30 | 70 / 70 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
sub | test_01A.txt, test_02A.txt, test_04A.txt, test_05A.txt, test_07A.txt, test_09A.txt, test_10A.txt, test_11A.txt, test_12A.txt, test_13A.txt, test_15A.txt, test_17A.txt, test_18A.txt, test_19A.txt, test_21A.txt, test_22A.txt, test_23A.txt, test_25A.txt, test_27A.txt, test_28A.txt, test_29A.txt, test_31A.txt, test_33A.txt, test_34A.txt, test_35A.txt, test_37A.txt, test_38A.txt, test_40A.txt, test_42A.txt, test_44A.txt, test_46A.txt, test_48A.txt |
All | sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, test_01A.txt, test_02A.txt, test_03.txt, test_04A.txt, test_05A.txt, test_06.txt, test_07A.txt, test_08.txt, test_09A.txt, test_10A.txt, test_11A.txt, test_12A.txt, test_13A.txt, test_14.txt, test_15A.txt, test_16.txt, test_17A.txt, test_18A.txt, test_19A.txt, test_20.txt, test_21A.txt, test_22A.txt, test_23A.txt, test_24.txt, test_25A.txt, test_26.txt, test_27A.txt, test_28A.txt, test_29A.txt, test_30.txt, test_31A.txt, test_32.txt, test_33A.txt, test_34A.txt, test_35A.txt, test_36.txt, test_37A.txt, test_38A.txt, test_39.txt, test_40A.txt, test_41.txt, test_42A.txt, test_43.txt, test_44A.txt, test_45.txt, test_46A.txt, test_47.txt, test_48A.txt, test_49.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 1 ms | 764 KB |
sample_02.txt | AC | 2 ms | 892 KB |
sample_03.txt | AC | 2 ms | 3068 KB |
sample_04.txt | AC | 2 ms | 2300 KB |
test_01A.txt | AC | 1 ms | 508 KB |
test_02A.txt | AC | 2 ms | 2812 KB |
test_03.txt | AC | 4 ms | 2556 KB |
test_04A.txt | AC | 1 ms | 508 KB |
test_05A.txt | AC | 2 ms | 892 KB |
test_06.txt | AC | 4 ms | 3452 KB |
test_07A.txt | AC | 2 ms | 892 KB |
test_08.txt | AC | 4 ms | 3580 KB |
test_09A.txt | AC | 1 ms | 508 KB |
test_10A.txt | AC | 1 ms | 764 KB |
test_11A.txt | AC | 1 ms | 764 KB |
test_12A.txt | AC | 1 ms | 508 KB |
test_13A.txt | AC | 2 ms | 892 KB |
test_14.txt | AC | 3 ms | 2684 KB |
test_15A.txt | AC | 1 ms | 508 KB |
test_16.txt | AC | 2 ms | 2684 KB |
test_17A.txt | AC | 2 ms | 2556 KB |
test_18A.txt | AC | 1 ms | 892 KB |
test_19A.txt | AC | 1 ms | 892 KB |
test_20.txt | AC | 3 ms | 2684 KB |
test_21A.txt | AC | 1 ms | 764 KB |
test_22A.txt | AC | 1 ms | 892 KB |
test_23A.txt | AC | 1 ms | 636 KB |
test_24.txt | AC | 3 ms | 2684 KB |
test_25A.txt | AC | 1 ms | 2556 KB |
test_26.txt | AC | 3 ms | 2812 KB |
test_27A.txt | AC | 1 ms | 764 KB |
test_28A.txt | AC | 1 ms | 764 KB |
test_29A.txt | AC | 1 ms | 508 KB |
test_30.txt | AC | 3 ms | 1660 KB |
test_31A.txt | AC | 1 ms | 764 KB |
test_32.txt | AC | 3 ms | 1660 KB |
test_33A.txt | AC | 1 ms | 508 KB |
test_34A.txt | AC | 1 ms | 892 KB |
test_35A.txt | AC | 2 ms | 2556 KB |
test_36.txt | AC | 2 ms | 1148 KB |
test_37A.txt | AC | 1 ms | 508 KB |
test_38A.txt | AC | 2 ms | 2556 KB |
test_39.txt | AC | 4 ms | 2428 KB |
test_40A.txt | AC | 1 ms | 892 KB |
test_41.txt | AC | 4 ms | 2556 KB |
test_42A.txt | AC | 1 ms | 892 KB |
test_43.txt | AC | 4 ms | 3196 KB |
test_44A.txt | AC | 1 ms | 892 KB |
test_45.txt | AC | 4 ms | 3452 KB |
test_46A.txt | AC | 1 ms | 892 KB |
test_47.txt | AC | 3 ms | 2812 KB |
test_48A.txt | AC | 1 ms | 892 KB |
test_49.txt | AC | 4 ms | 3708 KB |