145 条题解

  • -11
    @ 2022-1-20 11:35:02

    本人太弱不会a+b,只能冲一发退火来碰碰运气

    #include<bits/stdc++.h> 
    #define ll long long
    using namespace std;
    const double d=0.999;
    const double lim=1e-10;
    ll a,b;
    ll ans;
    ll num;
    int read()
    {
    	int x=0,f=1;
    	char ch=getchar();
    	while(ch<'0'||ch>'9')
    	{
    		if(ch=='-') f=-1;
    		ch=getchar();
    	}
    	while(ch>='0'&&ch<='9')
    	{
    		x=x*10+(ch^48);
    		ch=getchar();
    	}
    	return x*f;
    }
    int calc(int x)
    {
        return abs(a+b-x)-abs(a+b-ans);
    }
    void ghost_fire()
    {
        double T=1000000;
        while(T>lim)
        {
            int x=num+((rand()<<1)-RAND_MAX)*T;
            int del=calc(x);
            if(del<0)
            {
                ans=x;
                num=x;
            }
            else if(exp(-del/T)>(double)rand()/RAND_MAX) num=x;
            T*=d;
        }
    }
    void work()
    {
    	for(int i=1;i<=100;i++) ghost_fire();
    }
    int main()
    {
        a=read();
        b=read();
        work();
        cout<<ans<<endl;
        return 0;
    }
    
    • @ 2022-1-28 15:21:56

      emm……

    • @ 2022-7-25 16:32:12

      emmm……您会模拟退火?膜拜

    • @ 2024-8-27 13:14:06

      orz

信息

ID
56
时间
1000ms
内存
1024MiB
难度
1
标签
递交数
9043
已通过
4027
上传者