题目大意
给定一个棋子和边长为n的阶梯,每次操作可以把棋子分裂成上面一个和右边一个,目标是将棋子移除棋盘,问操作次数和每次操作原棋子的位置
无解输出-1
题目思路
我们先从小数据开始分析:
-
n = 1 n=1 n=1时操作一次即可
-
n = 2 n=2 n=2时
操作四次即可,最后的五个点标起来了 -
n = 3 n=3 n=3时
(此例子优先向上分裂)此时我们可以发现,前一个点总是会挡住下一个点分裂,如果此时再次分裂为前一个点开路,让右边的点过去,开路生成的右点又会堵住已经过去的点的上面位置,于是无法跑出 n = 3 n=3 n=3的阶梯
-
n > 3 n>3 n>3因为跑不出 3 3 3,所以大于 3 3 3的情况也是无解喽
代码如下
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n==1){
cout<<1<<endl;
cout<<1<<" "<<1<<endl;
}
else if(n==2){
cout<<4<<endl;
cout<<1<<" "<<1<<endl;
cout<<2<<" "<<1<<endl;
cout<<2<<" "<<2<<endl;
cout<<1<<" "<<2<<endl;
}
else{
cout<<-1<<endl;
}
return 0;
}