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;
}

转载于:https://www.cnblogs.com/RealMadrid/p/10599449.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值