| 提出番号 | 1356 |
|---|---|
| 提出者 | E869120 |
| 言語 | C++ |
| 提出日時 | 2018-07-20 16:43:33 |
| 問題名 | (65)Small Grid and Score |
| 結果 | WA |
| 点数 | 0% |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 1 | AC | 92% | 2ms | 8400KB |
| 2 | WA | 0% | 2ms | 8368KB |
| 3 | AC | 92% | 1ms | 8704KB |
| 4 | WA | 0% | 2ms | 8432KB |
| 5 | WA | 0% | 2ms | 8480KB |
| 6 | WA | 0% | 2ms | 8400KB |
| 7 | WA | 0% | 2ms | 8416KB |
| 8 | AC | 92% | 2ms | 8704KB |
| 9 | WA | 0% | 2ms | 8400KB |
| 10 | WA | 0% | 2ms | 7424KB |
| 11 | AC | 92% | 2ms | 7968KB |
| 12 | AC | 92% | 2ms | 7824KB |
| 13 | AC | 92% | 2ms | 7552KB |
| 14 | WA | 0% | 2ms | 8048KB |
| 15 | WA | 0% | 57ms | 8448KB |
| 16 | AC | 92% | 2ms | 7824KB |
| 17 | WA | 0% | 3ms | 8016KB |
| 18 | AC | 92% | 1ms | 8512KB |
| 19 | AC | 92% | 1ms | 8272KB |
| 20 | AC | 92% | 2ms | 8080KB |
| 21 | AC | 92% | 2ms | 8672KB |
| 22 | AC | 92% | 2ms | 8672KB |
| 23 | AC | 92% | 2ms | 8704KB |
| 24 | AC | 92% | 2ms | 7232KB |
| テストケース | 結果 | 得点 | 実行時間 | メモリ使用量 |
|---|---|---|---|---|
| 25 | WA | 0% | 35ms | 7984KB |
| 26 | WA | 0% | 37ms | 7712KB |
| 27 | WA | 0% | 20ms | 8448KB |
| 28 | WA | 0% | 26ms | 8704KB |
| 29 | WA | 0% | 16ms | 8096KB |
| 30 | WA | 0% | 4ms | 7856KB |
| 31 | WA | 0% | 23ms | 7904KB |
| 32 | WA | 0% | 4ms | 8416KB |
| 33 | WA | 0% | 38ms | 8368KB |
| 34 | WA | 0% | 41ms | 8736KB |
| 35 | WA | 0% | 10ms | 8224KB |
| 36 | WA | 0% | 5ms | 8416KB |
| 37 | WA | 0% | 24ms | 7216KB |
| 38 | WA | 0% | 41ms | 8400KB |
| 39 | WA | 0% | 8ms | 8432KB |
| 40 | WA | 0% | 18ms | 8144KB |
| 41 | WA | 0% | 39ms | 7776KB |
| 42 | WA | 0% | 7ms | 7968KB |
| 43 | WA | 0% | 37ms | 7504KB |
| 44 | WA | 0% | 12ms | 8336KB |
| 45 | WA | 0% | 13ms | 8704KB |
| 46 | WA | 0% | 4ms | 8432KB |
| 47 | WA | 0% | 14ms | 8016KB |
| 48 | WA | 0% | 12ms | 8416KB |
| 49 | WA | 0% | 4ms | 7904KB |
| 50 | WA | 0% | 36ms | 8688KB |
| 51 | WA | 0% | 5ms | 8400KB |
| 52 | WA | 0% | 39ms | 8640KB |
| 53 | WA | 0% | 4ms | 8400KB |
| 54 | WA | 0% | 32ms | 8416KB |
| 55 | WA | 0% | 10ms | 8448KB |
| 56 | WA | 0% | 11ms | 8416KB |
| 57 | WA | 0% | 8ms | 7984KB |
| 58 | WA | 0% | 25ms | 8096KB |
| 59 | WA | 0% | 6ms | 8016KB |
| 60 | WA | 0% | 10ms | 7824KB |
| 61 | WA | 0% | 7ms | 8176KB |
| 62 | WA | 0% | 20ms | 8416KB |
| 63 | WA | 0% | 10ms | 8000KB |
| 64 | WA | 0% | 18ms | 8432KB |
| 65 | WA | 0% | 29ms | 8416KB |
| 66 | WA | 0% | 48ms | 8416KB |
| 67 | WA | 0% | 14ms | 8352KB |
| 68 | WA | 0% | 12ms | 8256KB |
| 69 | WA | 0% | 33ms | 8368KB |
| 70 | WA | 0% | 3ms | 7840KB |
| 71 | WA | 0% | 17ms | 8608KB |
| 72 | WA | 0% | 8ms | 7968KB |
| 73 | WA | 0% | 4ms | 7904KB |
| 74 | WA | 0% | 11ms | 7520KB |
| 75 | WA | 0% | 7ms | 8448KB |
| 76 | WA | 0% | 10ms | 7520KB |
| 77 | WA | 0% | 6ms | 8720KB |
| 78 | WA | 0% | 25ms | 8656KB |
| 79 | WA | 0% | 44ms | 8016KB |
| 80 | WA | 0% | 13ms | 8432KB |
| 81 | WA | 0% | 7ms | 8160KB |
| 82 | WA | 0% | 33ms | 7840KB |
| 83 | WA | 0% | 62ms | 8432KB |
| 84 | WA | 0% | 34ms | 8304KB |
| 85 | WA | 0% | 22ms | 8480KB |
| 86 | WA | 0% | 26ms | 8448KB |
| 87 | WA | 0% | 21ms | 8432KB |
| 88 | WA | 0% | 36ms | 8432KB |
| 89 | WA | 0% | 28ms | 8432KB |
| 90 | WA | 0% | 45ms | 8336KB |
| 91 | WA | 0% | 23ms | 8672KB |
| 92 | WA | 0% | 3ms | 8704KB |
| 93 | WA | 0% | 12ms | 8144KB |
| 94 | WA | 0% | 18ms | 8416KB |
| 95 | WA | 0% | 6ms | 8416KB |
| 96 | WA | 0% | 7ms | 8336KB |
| 97 | WA | 0% | 30ms | 8032KB |
| 98 | WA | 0% | 24ms | 7792KB |
| 99 | WA | 0% | 3ms | 7808KB |
| 100 | WA | 0% | 5ms | 8304KB |
| 101 | WA | 0% | 7ms | 7792KB |
| 102 | WA | 0% | 8ms | 8432KB |
| 103 | WA | 0% | 18ms | 8416KB |
| 104 | WA | 0% | 8ms | 8416KB |
| 105 | WA | 0% | 8ms | 7824KB |
| 106 | WA | 0% | 4ms | 8720KB |
| 107 | WA | 0% | 14ms | 8720KB |
| 108 | WA | 0% | 46ms | 8272KB |
| 109 | WA | 0% | 26ms | 8432KB |
| 110 | WA | 0% | 37ms | 7888KB |
| 111 | WA | 0% | 5ms | 8672KB |
| 112 | WA | 0% | 25ms | 7520KB |
| 113 | WA | 0% | 12ms | 8064KB |
| 114 | WA | 0% | 8ms | 8688KB |
| 115 | WA | 0% | 46ms | 8048KB |
| 116 | WA | 0% | 10ms | 8144KB |
| 117 | WA | 0% | 36ms | 8400KB |
| 118 | WA | 0% | 4ms | 7776KB |
| 119 | WA | 0% | 29ms | 8064KB |
| 120 | WA | 0% | 16ms | 8720KB |
| 121 | WA | 0% | 4ms | 8128KB |
| 122 | WA | 0% | 38ms | 7968KB |
| 123 | WA | 0% | 37ms | 7552KB |
| 124 | WA | 0% | 31ms | 7968KB |
#include <iostream>
#include <vector>
#include <string>
#include <tuple>
#include <algorithm>
using namespace std;
int Rand(int p, int q) {
int s = 0, t = 1;
for (int i = 0; i < 3; i++) { s += (rand() % 1024)*t; t *= 1024; }
return p + s % (q - p + 1);
}
long long dp[44][44], dp2[44][44];
pair<vector<string>, long long> solve(long long N) {
for (int i = 2; i < 44; i++) {
long long H = i / 2, W = (i + 1) / 2;
for (int j = 1; j <= 100; j++) {
vector<string>F(H, "");
for (int j = 0; j < H; j++) { for (int k = 0; k < W; k++) F[j] += "."; }
long long S = Rand(H * W / 2, H * W * 2 / 3 + 1);
for (int k = 1; k <= S; k++) {
while (true) {
int px = Rand(0, H - 1), py = Rand(0, W - 1);
if (F[px][py] == '.') { F[px][py] = '2'; break; }
}
}
bool OK = false; dp[0][0] = 1; if (F[0][0] == '2') dp[0][0] = 2;
for (int k = 0; k < H; k++) {
for (int l = 0; l < W; l++) {
if (k == 0 && l == 0) continue;
dp[k][l] = 0;
if (k >= 1) dp[k][l] += dp[k - 1][l];
if (l >= 1) dp[k][l] += dp[k][l - 1];
if (F[k][l] == '2') dp[k][l] *= 2;
if (dp[k][l] > N) { OK = true; break; }
}
}
if (OK == true || !(N * 5 / 6 <= dp[H - 1][W - 1] && dp[H - 1][W - 1] <= N)) continue;
dp2[H - 1][W - 1] = 1; if (F[H - 1][W - 1] == '2') dp2[H - 1][W - 1] = 2;
for (int k = H - 1; k >= 0; k--) {
for (int l = W - 1; l >= 0; l--) {
if (k == H - 1 && l == W - 1) continue;
dp2[k][l] = 0;
if (k < H - 1) dp2[k][l] += dp2[k + 1][l];
if (l < W - 1) dp2[k][l] += dp2[k][l + 1];
if (F[k][l] == '2') dp2[k][l] *= 2;
}
}
long long A = N - dp[H - 1][W - 1];
vector<tuple<long long, int, int>>vec;
for (int k = 0; k < H; k++) {
for (int l = 0; l < W; l++) { if (F[k][l] == '.') vec.push_back(make_tuple(dp[k][l] * dp2[k][l], k, l)); }
}
sort(vec.begin(), vec.end()); reverse(vec.begin(), vec.end());
for (int k = 0; k < vec.size(); k++) {
if (A >= get<0>(vec[k])) { F[get<1>(vec[k])][get<2>(vec[k])] = '1'; A -= get<0>(vec[k]); }
}
long long SS = 0, V = A;
while (A >= 2) { if (A % 2 == 1) SS++; A /= 2; SS++; }
if (SS <= (H + W + 1)) {
return make_pair(F, V);
}
}
}
return make_pair(vector<string>{""}, -1);
}
char c[60][60];
void getans(long long N) {
for (int i = 0; i < 60; i++) { for (int j = 0; j < 60; j++) c[i][j] = '#'; }
pair<vector<string>, int>C = solve(N);
int H = C.first.size(), W = C.first[0].size();
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) { c[i][j + 2] = C.first[i][j]; }
}
for (int i = 0; i < H + 2; i++) c[i][0] = '.'; c[0][1] = '.'; c[H][W + 1] = '.';
for (int i = 0; i < W + 2; i++) c[H + 1][i] = '.';
vector<int>G; long long V = C.second;
while (V >= 2) { if (V % 2 == 1) { G.push_back(1); V--; } G.push_back(2); V /= 2; }
reverse(G.begin(), G.end());
if (V == 0) { c[1][0] = '#'; }
int cx = 1, cy = 0;
for (int i = 0; i < G.size(); i++) { c[cx][cy] = ('0' + G[i]); if (cx < H + 1) cx++; else cy++; }
cout << H + 2 << " " << W + 2 << endl;
for (int i = 0; i < H + 2; i++) {
for (int j = 0; j < W + 2; j++) cout << c[i][j]; cout << endl;
}
}
int main() {
long long n; cin >> n;
getans(n);
return 0;
}