题解 P2041 【分裂游戏】
我们先给出结论:
- 当
n=1 时,显然,我们只需1 步,移动(1,1) 即可 - 当
n=2 时,题目已经给了我们答案 - 当
n=3 时,此题无解
然而,这是为什么呢?
- 假设我们的原数为
1 ,不难发现,每一次分裂即是一次将原数变成一个原数的\frac{1}{2}
我们来画一个图:
| 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;
}