Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int calc(int n, int m, int k)
- {
- if (n*m%k) return 0;
- unordered_set<string> ans;
- vector<int> v;
- int bins = n*m/k;
- for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) v.push_back(i);
- do
- {
- vector<string> cur;
- for (int i = 0; i < bins; i++)
- {
- string bin;
- for (int j = i*k; j < i*k+k; j++) bin += 1+v[j];
- sort(bin.begin(), bin.end());
- cur.push_back(bin);
- }
- sort(cur.begin(), cur.end());
- string f;
- for (auto &u : cur) f += u;
- ans.insert(f);
- } while (next_permutation(v.begin(), v.end()));
- return ans.size();
- }
- int main()
- {
- const int colWidth = 8, N = 4, M = 4, K = 6;
- auto start = chrono::high_resolution_clock::now();
- for (int k = 2; k <= K; k++)
- {
- cout << "\nk=" << k << "\n\n";
- cout << setw(colWidth) << " ";
- for (int n = 1; n <= N; n++) cout << setw(colWidth) << "n=" + to_string(n);
- cout << '\n';
- for (int m = 2; m <= M; m++)
- {
- cout << setw(colWidth) << "m=" + to_string(m);
- for (int n = 1; n <= N; n++) cout << setw(colWidth) << calc(n, m, k);
- cout << '\n';
- }
- }
- auto stop = chrono::high_resolution_clock::now();
- cout << "\nTime taken: " << chrono::duration_cast<chrono::seconds>(stop-start);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement