fork download
  1. #include <bits/stdc++.h>
  2. typedef long long ll;
  3. typedef long double ld;
  4. using namespace std;
  5. const int N = 8;
  6.  
  7. int pdr[2]{1,1}, pdc[2]{-1,1};
  8. int kdr[8]{1,1,1,0,-1,-1,-1,0}, kdc[8]{-1,0,1,1,1,0,-1,-1};
  9.  
  10. signed main() {
  11. ios_base::sync_with_stdio(false);
  12. cin.tie(NULL);
  13.  
  14. int res = 0;
  15.  
  16. for(int wkr = 0; wkr < N; wkr++) {
  17. for(int wkc = 0; wkc < N; wkc++) {
  18. for(int bkr = 0; bkr < N; bkr++) {
  19. for(int bkc = 0; bkc < N; bkc++) {
  20. if(abs(wkr-bkr) <= 1 && abs(wkc-bkc) <= 1) continue; //no touching kings
  21. for(int pr = 1; pr < N - 1; pr++) { //white pawn cannot be on first or last row
  22. for(int pc = 0; pc < N; pc++) {
  23. set<array<int,2>> s = {{wkr,wkc},{bkr,bkc},{pr,pc}};
  24. if(s.size() != 3) continue;
  25.  
  26. set<array<int,2>> black_bad; //squares black king cannot reach
  27. set<array<int,2>> white_bad; //squares white king cannot reach
  28. for(int i = 0; i < 2; i++) {
  29. black_bad.insert({pr+pdr[i],pc+pdc[i]});
  30. }
  31.  
  32. for(int i = 0; i < 8; i++) {
  33. black_bad.insert({wkr+kdr[i],wkc+kdc[i]}); //black can't visit near king
  34. white_bad.insert({bkr+kdr[i],bkc+kdc[i]}); //white can't visit near king
  35. }
  36.  
  37. white_bad.insert({pr,pc}); //white king cannot visit own pawn
  38.  
  39. int black_check = black_bad.count({bkr,bkc});
  40.  
  41. int black_has_move = 0;
  42. for(int i = 0; i < 8; i++) {
  43. int bknr = bkr + kdr[i], bknc = bkc + kdc[i];
  44. if(bknr >= 0 && bknr < N && bknc >= 0 && bknc < N && black_bad.count({bknr,bknc}) == 0) {
  45. black_has_move = 1;
  46. }
  47. }
  48.  
  49. int white_has_move = 0;
  50. if(s.count({pr+1,pc}) == 0) white_has_move = 1; //push pawn
  51.  
  52. for(int i = 0; i < 8; i++) {
  53. int wknr = wkr + kdr[i], wknc = wkc + kdc[i];
  54. if(wknr >= 0 && wknr < N && wknc >= 0 && wknc < N && white_bad.count({wknr,wknc}) == 0) {
  55. white_has_move = 1;
  56. }
  57. }
  58.  
  59. if(!black_check && !black_has_move || !white_has_move) {
  60. vector<string> board(8,string(8,'.'));
  61. board[wkr][wkc] = 'W';
  62. board[bkr][bkc] = 'B';
  63. board[pr][pc] = 'p';
  64. reverse(board.begin(),board.end());
  65. for(auto row : board) cout << row << '\n';
  66. res++;
  67. cout << '\n';
  68. }
  69.  
  70. }
  71. }
  72. }
  73. }
  74. }
  75. }
  76.  
  77. cout << res << '\n';
  78.  
  79. return 0;
  80. }
Success #stdin #stdout 0.29s 5288KB
stdin
Standard input is empty
stdout
B.......
p.......
W.......
........
........
........
........
........

B.......
..p.....
W.......
........
........
........
........
........

B.......
p.......
.W......
........
........
........
........
........

B.......
..p.....
.W......
........
........
........
........
........

.B......
.p......
.W......
........
........
........
........
........

..B.....
..p.....
..W.....
........
........
........
........
........

...B....
...p....
...W....
........
........
........
........
........

....B...
....p...
....W...
........
........
........
........
........

.....B..
.....p..
.....W..
........
........
........
........
........

......B.
......p.
......W.
........
........
........
........
........

.......B
.....p..
......W.
........
........
........
........
........

.......B
.......p
......W.
........
........
........
........
........

.......B
.....p..
.......W
........
........
........
........
........

.......B
.......p
.......W
........
........
........
........
........

B.......
..W.....
.p......
........
........
........
........
........

.......B
.....W..
......p.
........
........
........
........
........

W.......
p.B.....
........
........
........
........
........
........

W.B.....
p.......
........
........
........
........
........
........

B.W.....
........
.p......
........
........
........
........
........

.....W.B
........
......p.
........
........
........
........
........

.......W
.....B.p
........
........
........
........
........
........

.....B.W
.......p
........
........
........
........
........
........

22