From 96254947699986c59f0dc63d69fd4b76bd3ed43e Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Mon, 6 Jul 2026 19:08:08 +0200 Subject: Initial commit --- .../chessboard_and_queens_1624.cpp | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 01_introductory_problems/chessboard_and_queens_1624.cpp (limited to '01_introductory_problems/chessboard_and_queens_1624.cpp') diff --git a/01_introductory_problems/chessboard_and_queens_1624.cpp b/01_introductory_problems/chessboard_and_queens_1624.cpp new file mode 100644 index 0000000..d595232 --- /dev/null +++ b/01_introductory_problems/chessboard_and_queens_1624.cpp @@ -0,0 +1,42 @@ +#include +#include +#include + +void set_bit(std::bitset<64>& r, int i, int j) { + if (i >= 0 && i < 8 && j >= 0 && j < 8) + r |= 1ULL << (unsigned long long)(8*i + j); +} + +std::bitset<64> maskall(const std::bitset<64>& b, int i, int j) { + std::bitset<64> r{b}; + r |= 0x0101010101010101ULL << (unsigned long long)j; + for (int k = 0; k < 8; k++) { + set_bit(r, k, k+j-i); + set_bit(r, k, -k+j+i); + } + return r; +} + +long long f(std::bitset<64>& b, int i) { + if (i == 8) + return 1; + long long s{0}; + for (int j = 0; j < 8; j++) { + if (!b[8*i+j]) { + auto rr = maskall(b, i, j); + s += f(rr, i+1); + } + } + return s; +} + +int main() { + std::bitset<64> b{0}; + std::string s; + for (int i = 0; i < 8; i++) { + std::cin >> s; + for (int j = 0; j < 8; j++) + b[8*i+j] = s[j] == '*'; + } + std::cout << f(b, 0) << "\n"; +} -- cgit v1.3