Submission #3324797


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 ? b : (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 ? b : (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 5 ms
Memory 3964 KB

Judge Result

Set Name sub All
Score / Max Score 30 / 30 70 / 70
Status
AC × 32
AC × 57
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 2 ms 2684 KB
sample_02.txt AC 2 ms 892 KB
sample_03.txt AC 2 ms 1020 KB
sample_04.txt AC 2 ms 2684 KB
test_01A.txt AC 1 ms 508 KB
test_02A.txt AC 2 ms 892 KB
test_03.txt AC 5 ms 3964 KB
test_04A.txt AC 1 ms 508 KB
test_05A.txt AC 2 ms 892 KB
test_06.txt AC 4 ms 3196 KB
test_07A.txt AC 2 ms 2556 KB
test_08.txt AC 4 ms 2684 KB
test_09A.txt AC 1 ms 508 KB
test_10A.txt AC 1 ms 764 KB
test_11A.txt AC 2 ms 2684 KB
test_12A.txt AC 1 ms 508 KB
test_13A.txt AC 2 ms 2556 KB
test_14.txt AC 4 ms 3068 KB
test_15A.txt AC 1 ms 508 KB
test_16.txt AC 2 ms 1148 KB
test_17A.txt AC 1 ms 764 KB
test_18A.txt AC 2 ms 892 KB
test_19A.txt AC 2 ms 2812 KB
test_20.txt AC 4 ms 2684 KB
test_21A.txt AC 1 ms 764 KB
test_22A.txt AC 2 ms 892 KB
test_23A.txt AC 2 ms 2428 KB
test_24.txt AC 3 ms 2684 KB
test_25A.txt AC 2 ms 892 KB
test_26.txt AC 4 ms 2300 KB
test_27A.txt AC 1 ms 764 KB
test_28A.txt AC 2 ms 2428 KB
test_29A.txt AC 1 ms 508 KB
test_30.txt AC 3 ms 2684 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 2 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 892 KB
test_39.txt AC 4 ms 3324 KB
test_40A.txt AC 2 ms 2428 KB
test_41.txt AC 4 ms 2812 KB
test_42A.txt AC 2 ms 892 KB
test_43.txt AC 4 ms 2812 KB
test_44A.txt AC 2 ms 892 KB
test_45.txt AC 4 ms 3580 KB
test_46A.txt AC 2 ms 892 KB
test_47.txt AC 3 ms 2556 KB
test_48A.txt AC 2 ms 892 KB
test_49.txt AC 4 ms 3196 KB