Submission #47062366
Source Code Expand
#include <bits/stdc++.h>
namespace {
using Num = long long int;
using Grid = std::vector<std::string>;
constexpr Num SizeOfCandidates = 3;
Num n {0};
std::string rows;
std::string cols;
}
std::optional<Grid> visit_dfs(Grid& grid, Num current) {
const std::optional<Grid> zero;
if (current >= (n * n)) {
bool failed {false};
for(Num x{0}; !failed && (x<n); ++x) {
char first {'.'};
std::array<Num, SizeOfCandidates> counts {0,0,0};
for(Num y{0}; !failed && (y<n); ++y) {
const char c = grid.at(y).at(x);
if (c == '.') {
continue;
}
first = (first == '.') ? c : first;
counts.at(c - 'A') += 1;
}
failed |= (first != cols.at(x)) ||
std::any_of(counts.begin(), counts.end(),
[](const auto& a) { return a != 1; });
}
if (failed) {
return zero;
}
return grid;
}
const Num y = current / n;
const Num x = current % n;
const auto prev_value = grid[y][x];
std::array<Num, SizeOfCandidates> counts {0,0,0};
Num total {0};
for(Num i{0}; i<x; ++i) {
const char c = grid.at(y).at(i);
if (c == '.') {
continue;
}
counts.at(c - 'A') += 1;
++total;
}
std::vector<char> candidates;
candidates.reserve(4);
if ((n - x) > (SizeOfCandidates - total)) {
candidates.push_back('.');
}
if (total == 0) {
candidates.push_back(rows.at(y));
} else {
for(Num i{0}; i<SizeOfCandidates; ++i) {
if (counts.at(i) == 0) {
candidates.push_back('A' + i);
}
}
}
for(const auto& value : candidates) {
grid[y][x] = value;
const auto result = visit_dfs(grid, current + 1);
if (result.has_value()) {
return result;
}
grid[y][x] = prev_value;
}
return zero;
}
void solve(std::istream& is, std::ostream& os) {
is >> n >> rows >> cols;
Grid grid(n);
for(auto&& s : grid) {
s.resize(n, '.');
}
const auto answer = visit_dfs(grid, 0);
if (answer.has_value()) {
os << "Yes\n";
for(const auto& s : grid) {
os << s << "\n";
}
} else {
os << "No\n";
}
}
int main(void) {
solve(std::cin, std::cout);
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - ABC Puzzle |
| User | zettsut |
| Language | C++ 20 (gcc 12.2) |
| Score | 450 |
| Code Size | 2602 Byte |
| Status | AC |
| Exec Time | 194 ms |
| Memory | 3664 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 450 / 450 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt, sample_02.txt |
| All | sample_01.txt, sample_02.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| sample_01.txt | AC | 159 ms | 3512 KiB |
| sample_02.txt | AC | 1 ms | 3504 KiB |
| test_01.txt | AC | 1 ms | 3508 KiB |
| test_02.txt | AC | 1 ms | 3468 KiB |
| test_03.txt | AC | 1 ms | 3376 KiB |
| test_04.txt | AC | 1 ms | 3336 KiB |
| test_05.txt | AC | 1 ms | 3508 KiB |
| test_06.txt | AC | 1 ms | 3664 KiB |
| test_07.txt | AC | 1 ms | 3480 KiB |
| test_08.txt | AC | 1 ms | 3452 KiB |
| test_09.txt | AC | 1 ms | 3656 KiB |
| test_10.txt | AC | 1 ms | 3492 KiB |
| test_11.txt | AC | 1 ms | 3572 KiB |
| test_12.txt | AC | 1 ms | 3488 KiB |
| test_13.txt | AC | 1 ms | 3508 KiB |
| test_14.txt | AC | 1 ms | 3448 KiB |
| test_15.txt | AC | 1 ms | 3512 KiB |
| test_16.txt | AC | 1 ms | 3512 KiB |
| test_17.txt | AC | 1 ms | 3508 KiB |
| test_18.txt | AC | 1 ms | 3512 KiB |
| test_19.txt | AC | 1 ms | 3480 KiB |
| test_20.txt | AC | 1 ms | 3476 KiB |
| test_21.txt | AC | 5 ms | 3468 KiB |
| test_22.txt | AC | 182 ms | 3468 KiB |
| test_23.txt | AC | 182 ms | 3476 KiB |
| test_24.txt | AC | 165 ms | 3472 KiB |
| test_25.txt | AC | 85 ms | 3664 KiB |
| test_26.txt | AC | 174 ms | 3476 KiB |
| test_27.txt | AC | 103 ms | 3512 KiB |
| test_28.txt | AC | 99 ms | 3456 KiB |
| test_29.txt | AC | 147 ms | 3464 KiB |
| test_30.txt | AC | 187 ms | 3476 KiB |
| test_31.txt | AC | 181 ms | 3444 KiB |
| test_32.txt | AC | 194 ms | 3440 KiB |
| test_33.txt | AC | 179 ms | 3472 KiB |
| test_34.txt | AC | 78 ms | 3476 KiB |
| test_35.txt | AC | 171 ms | 3456 KiB |
| test_36.txt | AC | 21 ms | 3512 KiB |
| test_37.txt | AC | 119 ms | 3476 KiB |
| test_38.txt | AC | 138 ms | 3660 KiB |
| test_39.txt | AC | 53 ms | 3472 KiB |
| test_40.txt | AC | 184 ms | 3576 KiB |
| test_41.txt | AC | 1 ms | 3472 KiB |
| test_42.txt | AC | 1 ms | 3436 KiB |
| test_43.txt | AC | 1 ms | 3572 KiB |
| test_44.txt | AC | 1 ms | 3524 KiB |
| test_45.txt | AC | 1 ms | 3480 KiB |
| test_46.txt | AC | 1 ms | 3496 KiB |
| test_47.txt | AC | 62 ms | 3660 KiB |
| test_48.txt | AC | 43 ms | 3480 KiB |
| test_49.txt | AC | 61 ms | 3380 KiB |
| test_50.txt | AC | 42 ms | 3380 KiB |
| test_51.txt | AC | 1 ms | 3660 KiB |
| test_52.txt | AC | 1 ms | 3580 KiB |
| test_53.txt | AC | 1 ms | 3508 KiB |
| test_54.txt | AC | 1 ms | 3444 KiB |
| test_55.txt | AC | 1 ms | 3580 KiB |
| test_56.txt | AC | 1 ms | 3508 KiB |
| test_57.txt | AC | 46 ms | 3468 KiB |
| test_58.txt | AC | 58 ms | 3580 KiB |
| test_59.txt | AC | 151 ms | 3496 KiB |
| test_60.txt | AC | 150 ms | 3476 KiB |