Submission #1180744
Source Code Expand
#include <cstdio>
#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++)
struct board {
int cnt;
bool check;
bool queen[8][8];
bool used[8][8];
void init() {
cnt = 0;
check = true;
fill(queen[0], queen[8], false);
fill(used[0], used[8], false);
}
void set(int i, int j) {
if (queen[i][j]) return;
use(i, j);
int a = j + i;
int b = j - i;
REP(k, 8) {
use(i, k);
use(k, j);
int c = a - k;
if (c >= 0 && c < 8) use(k, c);
int d = b + k;
if (d >= 0 && d < 8) use(k, d);
}
queen[i][j] = true;
cnt++;
}
void use(int i, int j) {
used[i][j] = true;
if (queen[i][j]) check = false;
}
bool next(int &i, int &j) {
while (true) {
if (j == 8) { j = 0; i++; }
if (i == 8) { return false; }
if (!used[i][j]) break;
j++;
}
return true;
}
void dump() {
REP(i, 8) REP(j, 8) {
printf("%c%s", queen[i][j] ? 'Q' : '.', j == 7 ? "\n" : "");
}
}
};
char c[8][8 + 1];
board b;
board ans;
bool dfs(board &b, int i, int j) {
if (!b.check) return false;
if (b.cnt == 8) {
ans = b;
return true;
}
if (!b.next(i, j)) {
return false;
}
board b2 = b;
b2.set(i, j);
if (dfs(b2, i, j + 1)) return true;
if (dfs(b, i, j + 1)) return true;
return false;
}
void solve() {
if (dfs(b, 0, 0)) {
ans.dump();
} else {
puts("No Answer");
}
}
void input() {
b.init();
REP(i, 8) {
scanf("%s", c[i]);
REP(j, 8) if (c[i][j] == 'Q') b.set(i, j);
}
}
int main() {
input();
solve();
return 0;
}
Submission Info
Submission Time
2017-03-26 20:26:34+0900
Task
C - パズルのお手伝い
User
nejiko96
Language
C++14 (GCC 5.4.1)
Score
100
Code Size
1679 Byte
Status
AC
Exec Time
1 ms
Memory
128 KB
Compile Error
./Main.cpp: In function ‘void input()’:
./Main.cpp:88:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", c[i]);
^
Judge Result
Set Name
All
Score / Max Score
100 / 100
Status
Set Name
Test Cases
All
00_sample1.txt, 00_sample2.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 01_rnd_20.txt, 01_rnd_21.txt, 01_rnd_22.txt, 01_rnd_23.txt, 01_rnd_24.txt, 01_rnd_25.txt, 01_rnd_26.txt, 01_rnd_27.txt, 01_rnd_28.txt, 01_rnd_29.txt, 01_rnd_30.txt, 01_rnd_31.txt, 01_rnd_32.txt, 01_rnd_33.txt, 01_rnd_34.txt, 01_rnd_35.txt, 01_rnd_36.txt, 01_rnd_37.txt, 01_rnd_38.txt, 01_rnd_39.txt
Case Name
Status
Exec Time
Memory
00_sample1.txt
AC
1 ms
128 KB
00_sample2.txt
AC
0 ms
128 KB
01_rnd_00.txt
AC
1 ms
128 KB
01_rnd_01.txt
AC
1 ms
128 KB
01_rnd_02.txt
AC
0 ms
128 KB
01_rnd_03.txt
AC
1 ms
128 KB
01_rnd_04.txt
AC
1 ms
128 KB
01_rnd_05.txt
AC
1 ms
128 KB
01_rnd_06.txt
AC
1 ms
128 KB
01_rnd_07.txt
AC
1 ms
128 KB
01_rnd_08.txt
AC
1 ms
128 KB
01_rnd_09.txt
AC
1 ms
128 KB
01_rnd_10.txt
AC
0 ms
128 KB
01_rnd_11.txt
AC
1 ms
128 KB
01_rnd_12.txt
AC
0 ms
128 KB
01_rnd_13.txt
AC
1 ms
128 KB
01_rnd_14.txt
AC
1 ms
128 KB
01_rnd_15.txt
AC
1 ms
128 KB
01_rnd_16.txt
AC
1 ms
128 KB
01_rnd_17.txt
AC
1 ms
128 KB
01_rnd_18.txt
AC
1 ms
128 KB
01_rnd_19.txt
AC
1 ms
128 KB
01_rnd_20.txt
AC
0 ms
128 KB
01_rnd_21.txt
AC
0 ms
128 KB
01_rnd_22.txt
AC
0 ms
128 KB
01_rnd_23.txt
AC
1 ms
128 KB
01_rnd_24.txt
AC
1 ms
128 KB
01_rnd_25.txt
AC
1 ms
128 KB
01_rnd_26.txt
AC
1 ms
128 KB
01_rnd_27.txt
AC
1 ms
128 KB
01_rnd_28.txt
AC
1 ms
128 KB
01_rnd_29.txt
AC
0 ms
128 KB
01_rnd_30.txt
AC
0 ms
128 KB
01_rnd_31.txt
AC
1 ms
128 KB
01_rnd_32.txt
AC
1 ms
128 KB
01_rnd_33.txt
AC
0 ms
128 KB
01_rnd_34.txt
AC
1 ms
128 KB
01_rnd_35.txt
AC
1 ms
128 KB
01_rnd_36.txt
AC
1 ms
128 KB
01_rnd_37.txt
AC
1 ms
128 KB
01_rnd_38.txt
AC
1 ms
128 KB
01_rnd_39.txt
AC
1 ms
128 KB