Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- using uint = unsigned int;
- using ll = long long;
- using ull = unsigned long long;
- using pii = pair<int, int>;
- using pll = pair<ll, ll>;
- #define dbg(x) cerr<<#x": "<<(x)<<endl
- #define dbg_p(x) cerr<<#x": "<<(x).first<<' '<<(x).second<<endl
- #define dbg_v(x, n) {cerr<<#x"[]: ";for(long long _=0;_<n;++_)cerr<<(x)[_]<<' ';cerr<<endl;}
- #define all(v) v.begin(), v.end()
- #define fi first
- #define se second
- template<typename T1, typename T2>
- ostream& operator <<(ostream &out, const pair<T1, T2> &item) {
- out << '(' << item.first << ", " << item.second << ')';
- return out;
- }
- template <typename T>
- ostream& operator <<(ostream &out, const vector<T>& v) {
- for(const auto &item : v) out << item << ' ';
- return out;
- }
- int p[222], n;
- set <int> v[222];
- int nr = 1;
- void add_edge(int a, int b) {
- if(v[a].count(b) || v[b].count(a)) {
- cerr << "Error!" << nr << ' ' << a << ' ' << b << '\n';
- exit(-1);
- }
- v[a].insert(b);
- v[b].insert(a);
- }
- void add_edges() {
- // v[p[1]].insert(p[2]]);
- // v[p[n + 1]].insert(p[n]);
- for(int i = 2; i <= n; i++) {
- add_edge(p[i], p[i - 1]);
- add_edge(p[i], p[n + i - 1]);
- }
- add_edge(p[n], p[n + 1]);
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- ifstream fin("embedding.in");
- fin >> n;
- for(int i = 1; i <= 2 * n; i++) cin >> p[i];
- add_edges();
- for(int i = 1; i <= 2 * n; i++) cin >> p[i];
- nr++;
- add_edges();
- for(int i = 1; i <= 2 * n; i++) cin >> p[i];
- nr++;
- add_edges();
- return 0;
- }
- /*
- cristi@pop-os:~/contest$ ./check <embedding.out
- Error!2 8 3
- cristi@pop-os:~/contest$ cat embedding.out
- 1 2 3 4 5 6 7 8 9 10 11 12
- 1 7 8 9 10 11 12 3 4 5 6 2
- 1 6 4 2 5 3 12 7 10 8 11 9
- cristi@pop-os:~/contest$
- */
- #include <bits/stdc++.h>
- using namespace std;
- using uint = unsigned int;
- using ll = long long;
- using ull = unsigned long long;
- using pii = pair<int, int>;
- using pll = pair<ll, ll>;
- #define dbg(x) cerr<<#x": "<<(x)<<endl
- #define dbg_p(x) cerr<<#x": "<<(x).first<<' '<<(x).second<<endl
- #define dbg_v(x, n) {cerr<<#x"[]: ";for(long long _=0;_<n;++_)cerr<<(x)[_]<<' ';cerr<<endl;}
- #define all(v) v.begin(), v.end()
- #define fi first
- #define se second
- template<typename T1, typename T2>
- ostream& operator <<(ostream &out, const pair<T1, T2> &item) {
- out << '(' << item.first << ", " << item.second << ')';
- return out;
- }
- template <typename T>
- ostream& operator <<(ostream &out, const vector<T>& v) {
- for(const auto &item : v) out << item << ' ';
- return out;
- }
- const int N = 110;
- int n, p1[N], p2[N], p3[N];
- set <int> v[N];
- void first(int * p) {
- // v[1].insert(2);
- // v[n + 1].insert(n);
- // for(int i = 2; i <= n; i++) {
- // v[i].insert(i - 1);
- // v[i].insert(i + 1);
- // v[i].insert(n + i);
- // v[n + i].insert(i);
- // }
- for(int i = 1; i <= 2 * n; i++) p[i] = i;
- }
- void second(int * p) {
- p[1] = 1;
- p[n + 1] = 2 * n;
- for(int i = 2; i <= 2 * n; i++) {
- if(i >= 2 && i <= n) p[i] = n + i - 1;
- else if(i == 2 * n) p[i] = 2;
- else if(i != n + 1) p[i] = i - n + 1;
- }
- }
- void third(int * p) {
- p[1] = 1;
- p[n + 1] = 2 * n;
- vector <int> v[2], g, g2;
- for(int i = 2; i <= n; i++)
- v[i % 2].push_back(i);
- int pp[N];
- for(int i = 2; i <= n; i++)
- pp[i] = n + i - 1;
- dbg_v(pp, n + 1);
- rotate(pp + 2, pp + 3, pp + n + 1);
- dbg_v(pp, n + 1);
- for(auto i : v[1]) g.push_back(i), g2.push_back(pp[i]);
- for(auto i : v[0]) g.push_back(i), g2.push_back(pp[i]);
- // dbg(g2);
- // rotate(g2.begin(), g2.begin() + 2, g2.end());
- dbg(g);
- dbg(g2);
- for(int i = 2; i <= 2 * n; i++) {
- if(i <= n) p[i] = g.back(), g.pop_back();
- else if(i != n + 1) p[i] = g2.back(), g2.pop_back();
- }
- }
- void solve(int n) {
- // for(int i = 1; i <= n; i++)
- // v[i].clear();
- if(n >= 5) {
- first(p1);
- second(p2);
- third(p3);
- } else if(n == 3) {
- } else if(n == 4) {
- }
- for(int i = 1; i <= 2 * n; i++) cout << p1[i] << " \n"[i == 2 * n];
- for(int i = 1; i <= 2 * n; i++) cout << p2[i] << " \n"[i == 2 * n];
- for(int i = 1; i <= 2 * n; i++) cout << p3[i] << " \n"[i == 2 * n];
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin >> n;
- while(n) {
- solve(n);
- cin >> n;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement