結果

問題 No.2256 Step by Step
ユーザー December456
提出日時 2025-05-27 17:22:59
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 2,390 bytes
コンパイル時間 487 ms
コンパイル使用メモリ 30,708 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-05-27 17:23:02
合計ジャッジ時間 2,599 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 31 WA * 1
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp:6:3: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
    6 |   "1\n0\n0\n0\n1\n1",
      |   ^~~~~~~~~~~~~~~~~~
main.cpp:7:3: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
    7 |   "1\n0\n0\n0\n1\n1",
      |   ^~~~~~~~~~~~~~~~~~
main.cpp:8:3: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
    8 |   "024\n135\n135\n445\n232\n100",
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:9:3: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
    9 |   "0223\n1554\n1005\n2334\n1664\n6777"
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp: In function ‘int main()’:
main.cpp:48:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   48 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~

ソースコード

diff #

#include <cstdio>

constexpr int MAX_N = 1000 + 2;
constexpr int MAX_ID = 10;
constexpr char *ans[4] = {
  "1\n0\n0\n0\n1\n1",
  "1\n0\n0\n0\n1\n1",
  "024\n135\n135\n445\n232\n100",
  "0223\n1554\n1005\n2334\n1664\n6777"
};

int t = 0;

char s[6][MAX_N];

void placeVertical(int x, int y, int _t=-1) {
    int id = _t < 0 ? t : _t;

    for (int i = 0; i < x - 2; i++) {
        s[i][y] = s[i + 3][y];
    }

    for (int i = x; i > x - 3; i--) {
        s[i][y] = '0' + id;
    }

    t = (t + 1) % MAX_ID;
}

void placeHorizonal(int x, int y, int _t=-1) {
    int id = _t < 0 ? t : _t;

    for (int i = 0; i < x; i++) {
        for (int j = y; j < y + 3; j++) {
            s[i][j] = s[i + 1][j];
        }
    }

    for (int j = y; j < y + 3; j++) {
        s[x][j] = '0' + id;
    }

    t = (t + 1) % MAX_ID;
}

int main() {
    int n;
    scanf("%d", &n);

    if (n <= 4) {
        return puts(ans[n - 1]), 0;
    }

    placeHorizonal(5, 0);
    placeVertical(5, 0);
    placeHorizonal(4, 0);
    placeVertical(4, 1);
    placeHorizonal(3, 0);

    int y = 2;
    n -= 2;

    while (n != 1 && n != 3 && n != 4 && n != 6) {
        placeHorizonal(5, y);
        placeVertical(5, y + 1);
        placeHorizonal(4, y);
        placeHorizonal(5, y + 2);
        placeHorizonal(5, y);
        placeHorizonal(5, y + 2);
        placeVertical(5, y + 3);
        placeHorizonal(4, y + 2);

        y += 4;
        n -= 4;
    }

    if (n == 1) {
        placeVertical(5, y);
    }

    if (n == 3) {
        placeHorizonal(5, y);
        placeVertical(5, y + 1);
        placeHorizonal(4, y);
        placeVertical(4, y + 2);
        placeHorizonal(3, y);
    }

    if (n == 4) {
        for (int i = 0; i < 3; i++) {
            placeHorizonal(5, y);
            placeHorizonal(5, y + 1);
        }
        placeVertical(5, y + 3);
    }

    if (n == 6) {
        placeHorizonal(5, y);
        placeHorizonal(5, y + 1);
        placeHorizonal(5, y + 3, (t + 5) % MAX_ID);
        placeVertical(5, y + 5, (t + 5) % MAX_ID);
        placeHorizonal(4, y + 3);
        placeVertical(4, y + 4);
        placeHorizonal(3, y + 3);
        placeHorizonal(5, y + 1, (t + 6) % MAX_ID);
        placeHorizonal(5, y, (t + 6) % MAX_ID);
        placeHorizonal(5, y + 1);
        placeHorizonal(5, y);
    }

    for (int i = 0; i < 6; i++) {
        printf("%s\n", s[i]);
    }

    return 0;
}
0