Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <fstream>
- long long solve(std::string &top, std::string &bottom, std::string &left, std::string &right) {
- long long ans = 0;
- for (int i = 0; i + 1 < static_cast<int>(top.size()); ++i) {
- for (int j = i + 1; j < static_cast<int>(top.size()); ++j) {
- for (int shift = j - static_cast<int>(bottom.size()) + 1; shift <= i; shift++) {
- char c1 = bottom[i - shift];
- char c2 = bottom[j - shift];
- for (int l = 0; l + 1 < std::min<int>(static_cast<const int &>(left.size()),
- static_cast<const int &>(right.size())); ++l) {
- long long leftAns = 0;
- long long rightAns = 0;
- for (int k = 0; k + l + 1 < static_cast<int>(left.size()); ++k) {
- int tmp = k + l + 1;
- if (top[i] == left[k] && c1 == left[tmp]) {
- leftAns++;
- }
- }
- for (int k = 0; k + l + 1 < static_cast<int>(right.size()); ++k) {
- int tmp = k + l + 1;
- if (top[j] == right[k] && c2 == right[tmp]) {
- rightAns++;
- }
- }
- ans += leftAns * rightAns;
- }
- }
- }
- }
- return ans;
- }
- int main() {
- std::ifstream cin("crosswords.in");
- std::ofstream cout("crosswords.out");
- std::vector<std::string> words(4);
- for (int i = 0; i < 4; ++i) {
- cin >> words[i];
- }
- long long ans = 0;
- for (int i = 0; i < 4; ++i) {
- for (int j = i + 1; j < 4; ++j) {
- std::vector<int> other(2);
- int idx = 0;
- for (int k = 0; k < 4; ++k) {
- if (k != i && k != j) {
- other[idx++] = k;
- }
- }
- int x = other[0];
- int y = other[1];
- ans += solve(words[i], words[j], words[x], words[y]) +
- solve(words[j], words[i], words[x], words[y]) +
- solve(words[i], words[j], words[y], words[x]) +
- solve(words[j], words[i], words[y], words[x]);
- }
- }
- cout << ans << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement