题解:P6892 [ICPC 2014 WF] Baggage
BlackPanda · · 题解
构造题。
首先我们知道达到终态需要满足相邻元素相同的对数为
先手模样例,以
此时,中间的
继续构造。
可以从上例中发现一个更为通用的解法:
考虑
初始时有
void work(int l, int r) {
if (r - l + 1 == 8) {
cout << r - 2 << " to " << l - 2 << endl;
cout << l + 2 << " to " << r - 2 << endl;
cout << l - 1 << " to " << l + 2 << endl;
cout << r - 1 << " to " << l - 1 << endl;
} else if (r - l + 1 == 10) {
cout << r - 2 << " to " << l - 2 << endl;
cout << l + 2 << " to " << r - 2 << endl;
cout << r - 4 << " to " << l + 2 << endl;
cout << l - 1 << " to " << r - 4 << endl;
cout << r - 1 << " to " << l - 1 << endl;
} else if (r - l + 1 == 12) {
cout << r - 2 << " to " << l - 2 << endl;
cout << r - 5 << " to " << r - 2 << endl;
cout << l + 1 << " to " << r - 5 << endl;
cout << r - 6 << " to " << l + 1 << endl;
cout << l - 1 << " to " << r - 6 << endl;
cout << r - 1 << " to " << l - 1 << endl;
} else if (r - l + 1 == 14) {
cout << l + 7 << " to " << l - 2 << endl;
cout << l + 4 << " to " << l + 7 << endl;
cout << r - 2 << " to " << l + 4 << endl;
cout << l + 2 << " to " << r - 2 << endl;
cout << r - 5 << " to " << l + 2 << endl;
cout << l - 1 << " to " << r - 5 << endl;
cout << r - 1 << " to " << l - 1 << endl;
} else {
cout << r - 2 << " to " << l - 2 << endl;
cout << l + 2 << " to " << r - 2 << endl;
work(l + 4, r - 4);
cout << l - 1 << " to " << r - 5 << endl;
cout << r - 1 << " to " << l - 1 << endl;
}
return;
}
/*====================*/
void Solve() {
cin >> n;
if (n == 3) {
cout << "2 to -1\n" << "5 to 2\n" << "3 to -3\n";
} else {
work(1, 2 * n);
}
return;
}