ACM-ICPC 2014 WF problem a
构造,需要有3,4,5,6,7的特例,然后n就可以转化为n-4的解
6,7 的解凑了好久,然后3 也凑了好久,最后编程穷举算出来。。。
直接上代码吧
#include <iostream>
using namespace std;
void out(int a, int b)
{
cout << a << " to " << b << endl;
}
int fuck(int s,int n)
{
if (n == 3)
{
int s0 = s-1;
out(s0 + 2, s0 - 1);
out(s0 + 5, s0 + 2);
out(s0 + 3, s0 - 3);
return 0;
}
if (n == 4)
{
int s0 = s - 1;
out(s0 + 6, s0 - 1);
out(s0 + 3, s0 + 6);
out(s0 + 0, s0 + 3);
out(s0 + 7, s0 + 0);
return 0;
}
if (n == 5)
{
int s0 = s - 1;
out(s0 + 8, s0 - 1);
out(s0 + 3, s0 + 8);
out(s0 + 6, s0 + 3);
out(s0 + 0, s0 + 6);
out(s0 + 9, s0 + 0);
return 0;
}
if (n == 6)
{
int s0 = s - 1;
out(s0 + 10, s0 - 1);
out(s0 + 7, s0 + 10);
out(s0 + 2, s0 + 7);
out(s0 + 6, s0 + 2);
out(s0 + 0, s0 + 6);
out(s0 + 11, s0 + 0);
return 0;
}
if (n == 7)
{
int s0 = s - 1;
out(s0 + 12, s0 - 1);
out(s0 + 5, s0 + 12);
out(s0 + 8, s0 + 5);
out(s0 + 3, s0 + 8);
out(s0 + 9, s0 + 3);
out(s0 + 0, s0 + 9);
out(s0 + 13, s0 + 0);
return 0;
}
int s0 = s - 1;
int end = 2 * n+s0;
out(end - 2, s0 - 1);
out(s0 + 3, end - 2);
fuck(s+4,n-4);
out(s0 + 0, end - 5);
out(end - 1, s0 + 0);
return 0;
}
int main()
{
int n;
while (cin >> n) {
fuck(1, n);
cout << endl;
}
}