Submission #1149611


Source Code Expand

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;

#define REP(i,n)   for(int i=0; i<(int)(n); i++)
#define FOR(i,b,e) for(int i=(b); i<=(int)(e); i++)

const int K_MAX = 9;
const int N_MAX = 50;
const int V_MAX = 10;
const int W_MAX = 27;
const int S_MAX = 3;

int K, N;
char v[N_MAX][V_MAX + 1];
char w[N_MAX][W_MAX + 1];

// each digit in v
int d[N_MAX][V_MAX];
// length of s[i]
int ln[K_MAX + 1];
// s[i] : string corresponds to 1-K
char s[K_MAX + 1][S_MAX + 1];


void init() {
  REP(i, N) REP(j, strlen(v[i])) d[i][j] = v[i][j] - '0';
  fill(ln, ln + K + 1, 1);
}

bool next() {
  for (int j = K; j > 0; j--) {
    if (ln[j] < S_MAX) {
      ln[j]++;
      return true;
    }
    ln[j] = 1;
  }
  return false;
}

void solve() {
  init();
  bool found = false;
  while (true) {
    memset(s, '\0', sizeof(s));
    bool ok1 = true;
    // FOR(i, 1, K) printf("%d%c", ln[i], i == K ? '\n' : ' ');
    REP(i, N) {
      int lf = 0;
      int lt = strlen(w[i]);
      bool ok2 = true;
      for (int j = 0; d[i][j] > 0; j++) {
        int e = d[i][j];
        int ld = ln[e];
        if (lf + ld > lt) {
          // printf("(1) : %s %d + %d > %d\n", w[i], lf, ld, lt);
          ok2 = false;
          break;
        }
        if (s[e][0]) {
          if (memcmp(s[e], w[i] + lf, ld) != 0) {
            // printf("(2) : %s[%d, %d] != %d:%s\n", w[i], lf, ld, e, s[e]);
            ok2 = false;
            break;
          }
        } else {
          memcpy(s[e], w[i] + lf, ld);
          // printf("(3) : %d:%s <- %s[%d, %d]\n", e, s[e], w[i], lf, ld);
        }
        lf += ld;
      }
      if (!ok2) {
        ok1 = false;
        break;
      }
      if (lf != lt) {
        // printf("(4) : %s : %d != %d\n", w[i], lf, lt);
        ok1 = false;
        break;
      }
    }
    if (ok1) {
      found = true;
      break;
    }
    if (!next()) break;
  }

  if (found) {
    FOR(i, 1, K) printf("%s\n", s[i]);
  }
}

void input() {
  scanf("%d%d", &K, &N);
  REP(i, N) scanf("%s%s", v + i, w + i);
}

int main() {
  input();
  solve();
  return 0;
}

Submission Info

Submission Time
Task D - 語呂合わせ
User nejiko96
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2112 Byte
Status AC
Exec Time 2 ms
Memory 128 KB

Compile Error

./Main.cpp: In function ‘void input()’:
./Main.cpp:100:39: warning: format ‘%s’ expects argument of type ‘char*’, but argument 2 has type ‘char (*)[11]’ [-Wformat=]
   REP(i, N) scanf("%s%s", v + i, w + i);
                                       ^
./Main.cpp:100:39: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘char (*)[28]’ [-Wformat=]
./Main.cpp:99:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &K, &N);
                        ^
./Main.cpp:100:40: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   REP(i, N) scanf("%s%s", v + i, w + i);
                                        ^

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 40 / 40 60 / 60
Status
AC × 4
AC × 23
AC × 44
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
Subtask1 sample-02.txt, sample-03.txt, sample-04.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt
Subtask2 sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, subtask1-01.txt, subtask1-02.txt, subtask1-03.txt, subtask1-04.txt, subtask1-05.txt, subtask1-06.txt, subtask1-07.txt, subtask1-08.txt, subtask1-09.txt, subtask1-10.txt, subtask1-11.txt, subtask1-12.txt, subtask1-13.txt, subtask1-14.txt, subtask1-15.txt, subtask1-16.txt, subtask1-17.txt, subtask1-18.txt, subtask1-19.txt, subtask1-20.txt, subtask2-01.txt, subtask2-02.txt, subtask2-03.txt, subtask2-04.txt, subtask2-05.txt, subtask2-06.txt, subtask2-07.txt, subtask2-08.txt, subtask2-09.txt, subtask2-10.txt, subtask2-11.txt, subtask2-12.txt, subtask2-13.txt, subtask2-14.txt, subtask2-15.txt, subtask2-16.txt, subtask2-17.txt, subtask2-18.txt, subtask2-19.txt, subtask2-20.txt
Case Name Status Exec Time Memory
sample-01.txt AC 1 ms 128 KB
sample-02.txt AC 1 ms 128 KB
sample-03.txt AC 1 ms 128 KB
sample-04.txt AC 0 ms 128 KB
subtask1-01.txt AC 1 ms 128 KB
subtask1-02.txt AC 1 ms 128 KB
subtask1-03.txt AC 1 ms 128 KB
subtask1-04.txt AC 1 ms 128 KB
subtask1-05.txt AC 1 ms 128 KB
subtask1-06.txt AC 1 ms 128 KB
subtask1-07.txt AC 1 ms 128 KB
subtask1-08.txt AC 1 ms 128 KB
subtask1-09.txt AC 1 ms 128 KB
subtask1-10.txt AC 1 ms 128 KB
subtask1-11.txt AC 1 ms 128 KB
subtask1-12.txt AC 1 ms 128 KB
subtask1-13.txt AC 1 ms 128 KB
subtask1-14.txt AC 1 ms 128 KB
subtask1-15.txt AC 1 ms 128 KB
subtask1-16.txt AC 1 ms 128 KB
subtask1-17.txt AC 1 ms 128 KB
subtask1-18.txt AC 1 ms 128 KB
subtask1-19.txt AC 1 ms 128 KB
subtask1-20.txt AC 1 ms 128 KB
subtask2-01.txt AC 1 ms 128 KB
subtask2-02.txt AC 1 ms 128 KB
subtask2-03.txt AC 1 ms 128 KB
subtask2-04.txt AC 1 ms 128 KB
subtask2-05.txt AC 1 ms 128 KB
subtask2-06.txt AC 1 ms 128 KB
subtask2-07.txt AC 1 ms 128 KB
subtask2-08.txt AC 1 ms 128 KB
subtask2-09.txt AC 2 ms 128 KB
subtask2-10.txt AC 1 ms 128 KB
subtask2-11.txt AC 1 ms 128 KB
subtask2-12.txt AC 1 ms 128 KB
subtask2-13.txt AC 1 ms 128 KB
subtask2-14.txt AC 1 ms 128 KB
subtask2-15.txt AC 1 ms 128 KB
subtask2-16.txt AC 1 ms 128 KB
subtask2-17.txt AC 1 ms 128 KB
subtask2-18.txt AC 1 ms 128 KB
subtask2-19.txt AC 1 ms 128 KB
subtask2-20.txt AC 1 ms 128 KB