1 条题解

  • 0
    @ 2025-8-24 22:30:11

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar lzqy_
    生而绚烂,璀璨如花。

    搬运于2025-08-24 22:30:11,当前版本为作者最后更新于2021-03-27 20:16:23,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    这一道题做法是分类讨论。

    假设 abca\leq b\leq c,那么就有以下结论:

    a,ba,b 等于 00

    很明显,一刀都不用切,全部给 cc 就可以了,切零刀。

    ● 有且仅有 aa 等于 00

    \quadb=cb=c

    \quad 在这种情况下,分出两半分别给 b,cb,c 即可,切一刀。

    \quadbcb≠c

    \quad 在这种情况下,切一刀肯定是不行的。但是,容易证明,切两刀可以将蛋糕分成任意比例的两份。因此切两刀。

    a,b,c0a,b,c≠0a=ba=bb=cb=c 同理)

    可以切两刀,分成的四份中,取任意相同的两份给 a,ba,b,剩下相同的两份给 cc 即可(按照 a=0&bca=0\&b≠c 的结论推出)

    a,b,c0a,b,c≠0a+b=ca+b=c

    可以切两刀,分成的四份中,取两份不同的给 a,ba,b,剩下不同的两份给 cc 便可以满足 a+b=ca+b=c;依然按照 a=0&bca=0\&b≠c 的结论得到,上述情况可以成立。

    ● 否则

    切三刀。根据 a=0&bca=0\&b≠c 的结论容易扩展得,切三刀可以分成任意三份的比例。

    容易证明,切两刀可以将蛋糕分成任意比例的两份。

    对于这一段的证明如下:

    设圆的面积为 SS,切两刀得到如下:

    由于这两道是随意切的,所以 kk 可以取到 0<k<10<k<1 的所有值。因此,同样颜色的扇形面积之和也可以取到 0<S<S0<S'<S 的所有值。

    代码如下

    #include<bits/stdc++.h>
    using namespace std;
    inline int read()
    {
    	register int x=0;
    	register char c=getchar();
    	for(;!(c>='0'&&c<='9');c=getchar());
    	for(;c>='0'&&c<='9';c=getchar())
    		x=(x<<1)+(x<<3)+c-'0';
    	return x;
    }
    int t,a[3];
    int main()
    {
    	t=read();
    	while(t--)
    	{
    		a[0]=read(),a[1]=read(),a[2]=read();
    		//读到数组里面利于排序
    		sort(a,a+3);
    		//以下是上文的分类讨论:
    		if(a[0]==0&&a[1]==0)
    		{
    			printf("0\n");
    			continue;
    		}
    		if(a[0]==0)
    		{
    			if(a[1]==a[2])
    				printf("1\n");
    			else
    				printf("2\n");
    			continue;
    		}
    		if(a[0]==a[1]||a[1]==a[2])
    		{
    			printf("2\n");
    			continue;
    		}
    		if(a[0]+a[1]==a[2])
    		{
    			printf("2\n");
    			continue;
    		}
    		printf("3\n");
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    6637
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者