1 条题解

  • 0
    @ 2024-10-22 22:43:26

    P1041 solution

    思路分析。

    首先有两个位数相同的a,b ( 1a,b<106 )a , b\ (\ 1\le a,b\lt 10^6\ ) , 交换它们对应数位的上的数使 a×ba\times b 最大。
    是个正常人都看得出来,这道题有一个关键的性质: a+b 不变。那它有什么用呢?
    定理1:周长相同的矩形中,正方形面积最大。
    也就是说,我们只需要让新的数字 a2 , b2a_2\ ,\ b_2 相等就好了。
    要是不相等呢?没有关系,可以让 a2a_2 成为两个数里面大的那个,只要它们的差最小就好了。
    具体怎么做呢?
    很简单,两个数字数位从高到低扫一遍,数字相同最好,如果出现了不相同的情况,就是第一次数字不同,就把 a2a_2 存数字较大的, b2b_2 存数字小的,之后所有数位的操作反过来,即 a2a_2 存小的, b2b_2 存大的,这样,可以使 a2>b2a_2\gt b_2 且它们的差最小。

    代码实现

    就知道你们爱看这个

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string> 
    //我是不会用万能头哒!!!
    
    using namespace std;
    #define int long long
    
    string a,b;     //输入的数字
    char a1,b1;     //a,b当前数位上的值
    int ia,ib;      //转成数字的a,b
    bool equals=1;  //两个数目前是否相等,默认为1
    signed main()
    {
      cout<<"Created by _LogicFish_"<<endl;
    	cin>>a>>b; //输入~
    	for(int i=0;i<a.size();i++)
    	{
    		a1=a[i],b1=b[i];   //记录当前数字
    		if(equals&&a1!=b1) //以前相同,从这一位开始不一样了
    			a[i]=max(a1,b1),
    			b[i]=min(a1,b1); //见思路分析
    		else
    			a[i]=min(a1,b1),
    			b[i]=max(a1,b1); //见思路分析
    		if(a1!=b1) equals=0; //如果不一样,equals改变状态
          //不知道为什么,写成equals=a1==b1就错了qwq
    	}
    	for(int i=0;i<a.size();i++)
    		ia=ia*10+a[i]-'0';
    	for(int i=0;i<b.size();i++)
    		ib=ib*10+b[i]-'0';
      //将更新的字符串转成数字
    	cout<<ia*ib; //完美的输出~!
    	return 0;
    }
    

    附录

    关于定理1:证明过程

    设正方形的边长为 aa ,面积为 S1S_1 ,则正方形的面积为 S1=a2S_1=a^2
    设长方形形的长为 bb ,宽为 cc ,面积为 S2S_2,则矩形的面积 S2=bc , b>cS_2=bc\ ,\ b>c
    由于正方形与矩形的周长相等,所以,

    4a=2(b+c)4a=2(b+c)

    a=12(b+c)a=\frac{1}{2}(b+c)

    通过推导,可以得到

    S1S2=a2bc=(12(b+c))2bcS_1-S_2=a^2 - bc= (\frac{1}{2}(b+c))^2 -bc

    其中,$(\frac{1}{2}(b+c))^2=\frac{1}{4} \times (b^2+c^2+2bc)$ 带入得

    $$S_1-S_2 = \frac{1}{4}(b^2+c^2)+\frac{1}{2}bc-bc\\ S_1-S_2 = \frac{1}{4}(b^2+c^2)-\frac{1}{2}bc\\ S_1-S_2 = \frac{1}{4}(b^2+c^2-2bc)\\ S_1-S_2 = \frac{1}{4}(b-c)^2 $$

    b>c,\because b>c, bc>0\therefore b-c>0 14(bc)2>0\therefore \frac{1}{4}(b-c)^2>0 也就是说 S1S2>0S_1-S_2>0 !! 证毕。

    信息

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