luoguP2041分裂游戏

我们先给出结论:

  1. \(n=1\)时,显然,我们只需\(1\)步,移动\((1,1)\)即可
  2. \(n=2\)时,题目已经给了我们答案
  3. \(n=3\)时,此题无解

然而,这是为什么呢?

  • 假设我们的原数为\(1\),不难发现,每一次分裂即是一次将原数变成一个原数的\(\frac{1}{2}\)

我们来画一个图:

1 \(\frac{1}{2}\) \(\frac{1}{4}\) \(\frac{1}{8}\) ······
\(\frac{1}{2}\) \(\frac{1}{4}\) \(\frac{1}{8}\)
\(\frac{1}{4}\) \(\frac{1}{8}\)
\(\frac{1}{8}\)

额,好像表格出不来

我们容易发现,第一行这无限个数的和应是\(1+\frac{1}{2}+\frac{1}{4}+······\)这些数的和无限接近于\(2\),在数学上,我们默认为\(2\)(我已经找到了一种绝佳的证明方法,可惜空间太短,写不下)!

同理,第\(2\)行的和即是\(1\),第三行为\(\frac{1}{2}\),第四行为\(\frac{1}{4}······\)

所以,这无限个数之和为\(4\)

而我们已知我们无限分类的和应为\(1\)

所以,当\(n=4\),\(ans=1+ \frac{1}{2}*2+\frac{1}{4}*3+\frac{1}{8}*4=\frac{13}{4}\),所以剩下的和为\(4-\frac{13}{4}=\frac{3}{4}<1\)所以\(n>4\)无解

那么,当\(n=3\)时,依照我们的方法,结果应是\(\frac{5}{4}>1\)所以可以,但是,我们发现,第一行和第一列最多只能有一个数\((\)在第一列时,每一个操作都只会在上和右增加数,而第一列数\(/\)第一行最多只能由第一个数得到\()\),所以\(n=3\)时,的最大值为\(\frac{5}{4}-\frac{1}{8}* 2=1\),然而,在有限的操作中,我们不可能使我们填满所有的格子,所以我们的\(ans\)会严格\(<1\)

综上,结论成立

代码(刚刚都解释过了) :

#include<iostream>
using namespace std;
int n;
int main() {
	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;
}
posted @ 2019-03-26 13:00  zeroqq  阅读(172)  评论(0编辑  收藏  举报
Live2D