洛谷P2041 分裂游戏——蒟蒻题解

题目大意

给定一个棋子和边长为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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值