Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include <vector>
- #include <string>
- #include <cmath>
- #include <unordered_map>
- #include <stack>
- #include <cassert>
- #include <algorithm>
- #include <iomanip>
- #include <map>
- #include <queue>
- #include <set>
- #include <iostream>
- #include <climits>
- #include <vector>
- #include <cassert>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <set>
- using namespace std;
- typedef long long ll;
- const int MAXN = 4;
- const int MAX_LEN = 100;
- const int ALPHA = 30;
- string str[MAXN + 10];
- ll dp[MAX_LEN + 10][MAX_LEN + 10][MAX_LEN + 10];
- ll calc[MAX_LEN + 10][ALPHA + 10][ALPHA + 10];
- ll go(vector<string> vec) {
- memset(dp, 0, sizeof(dp));
- memset(calc, 0, sizeof(calc));
- for (int i = 0; i < vec[4].size(); i++) {
- for (int j = i; j < vec[4].size(); j++) {
- ++calc[j - i][vec[4][i] - 'a'][vec[4][j] - 'a'];
- }
- }
- for (int len = 1; len <= MAX_LEN; len++) {
- for (int i = (int) vec[2].size() - 1; i >= 0; i--) {
- for (int j = (int) vec[1].size() - 1; j >= 0; j--) {
- dp[len][i][j] = dp[len][i + 1][j + 1] + calc[len][vec[2][i] - 'a'][vec[1][j] - 'a'];
- }
- }
- }
- ll ans = 0;
- for (int i = 0; i < (int)vec[0].size(); i++) {
- for (int j = i + 2; j < (int)vec[0].size(); j++) {
- for (int l = 0; l < (int)vec[1].size(); l++) {
- if (vec[0][i] != vec[1][l]) {
- continue;
- }
- for (int r = 0; r < (int)vec[2].size(); r++) {
- if (vec[0][j] != vec[2][r]) {
- continue;
- }
- ans += dp[j - i][l + 2][r + 2];
- }
- }
- }
- }
- return ans;
- }
- int main() {
- //freopen("input.txt", "r", stdin);
- //freopen("grand.in", "r", stdin);
- //freopen("grand.out", "w", stdout);
- int n = 4;
- for (int i = 0; i < n; i++) {
- cin >> str[i];
- }
- vector<int> vec;
- for (int i = 0; i < n; i++) {
- vec.push_back(i);
- }
- ll ans = 0;
- do {
- ans += go({ str[vec[0]], str[vec[1]], str[vec[2]], str[vec[3]] });
- } while (next_permutation(vec.begin(), vec.end()));
- cout << ans << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement