Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- #include <cstring>
- #include <string>
- #include <algorithm>
- #include <vector>
- #include <set>
- #include <map>
- #include <ctime>
- using namespace std;
- const int N = 1e5 + 5;
- int per[N], perwin[8], sz = 0;
- char s[N][4];
- pair<int, int> arr[N];
- int ans = 5;
- inline int getnum(char c) {
- if (c == 'A') return 1;
- if (c == 'B') return 2;
- return 4;
- }
- inline int getnum(int id) {
- int ans = 0;
- for (int i = 0; s[id][i]; ++i)
- ans |= getnum(s[id][i]);
- return ans;
- }
- bool comp(const pair<int, int>& a, const pair<int, int>& b) {
- return per[a.first] < per[b.first];
- }
- int main() {
- for (int i = 0; i < 8; ++i)
- per[i] = i;
- int n;
- cin >> n;
- gets(s[0]);
- for (int i = 0; i < n; ++i)
- gets(s[i]);
- for (int i = 0; i < n; ++i) {
- arr[i] = make_pair(getnum(i), i);
- per[i] = arr[i].first;
- }
- sort(per, per + n);
- sz = unique(per, per + n) - per;
- do {
- int q = 0;
- for (int i = 0; i < sz; ++i) {
- for (int j = 0; j < 3; ++j) {
- if ((per[i] & (1 << j)) && (!i || !(per[i-1] & (1 << j))))
- ++q;
- }
- }
- if (q < ans) {
- ans = q;
- for (int i = 0; i < sz; ++i)
- perwin[i] = per[i];
- }
- } while (next_permutation(per, per + sz));
- cout << ans << endl;
- for (int i = 0; i < sz; ++i)
- per[i] = perwin[i];
- for (int i = 0; i < sz; ++i)
- cout << per[i] << " ";
- cout << endl;
- // vot do suda vse normalno
- sort(arr, arr + n, comp);
- for (int i = 0; i < n; ++i)
- printf("%d ", arr[i].second + 1);
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement