1 条题解

  • 0
    @ 2025-8-24 21:33:17

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 任弈凡
    **

    搬运于2025-08-24 21:33:17,当前版本为作者最后更新于2019-03-15 16:01:21,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    我们先给出结论:

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

    然而,这是为什么呢?

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

    我们来画一个图:

    1 12\frac{1}{2} 14\frac{1}{4} 18\frac{1}{8} ······
    12\frac{1}{2} 14\frac{1}{4} 18\frac{1}{8}
    14\frac{1}{4} 18\frac{1}{8}
    18\frac{1}{8}

    额,好像表格出不来

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

    同理,第22行的和即是11,第三行为12\frac{1}{2},第四行为14\frac{1}{4}······

    所以,这无限个数之和为44

    而我们已知我们无限分类的和应为11

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

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

    信息

    ID
    1006
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者