啊啊啊第六个点一直WA
查看原帖
啊啊啊第六个点一直WA
329698
youdu666楼主2022/7/9 21:26
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
inline int read()
{
    int x=0,y=1;
    char c=getchar();
    while(c>'9'||c<'0')
    {
        if(c=='-')
            y=-1;
        c=getchar();
    }
    while(c<='9'&&c>='0')
    {
        x=x*10+c-'0';
        c=getchar();
    }
    return x*y;
}
ll v,ansa,ansb,ans,ansc,Ma,aa,bb,cc,Mb;
ll pr[201],q[201],k;
void dfsb(ll prn,ll sum)
{
    if(sum>Mb)
        return;
    if(prn>k)
    {
        bb=sum;
        cc=v/bb/aa;
        if(bb<aa||cc<bb) return;
        if(2*(aa*bb+bb*cc+aa*cc)<ans)
        {
            ans=2*(aa*bb+bb*cc+aa*cc);
            ansa=aa;
            ansb=bb;
            ansc=cc;
        }
        return;
    }
    if(q[prn])
    {
        q[prn]--;
        dfsb(prn,sum*pr[prn]);
        q[prn]++;
    }
    dfsb(prn+1,sum);
}
void dfs(ll prn,ll sum)
{
    if(sum>Ma)
        return;
    if(prn>k)
    {
        ll a=sum;
        if(ans<=(2*v/a+4*a*sqrt(v/a)))
            return;
        Mb=sqrt(v/a)+1;
        aa=a;
        dfsb(1,1);
        return;
    }
    if(q[prn])
    {
        q[prn]--;
        dfs(prn,sum*pr[prn]);
        q[prn]++;
    }
    dfs(prn+1,sum);
}
int main()
{
    int T=read();
    while(T--)
    {
        k=read();
        ans=1e16;
        v=1;
        for(int i=1;i<=k;i++)
        {
            pr[i]=read();
            q[i]=read();
            v*=pow(pr[i],q[i]);
        }
        Ma=pow(v,1.0/3)+1;
        dfs(1,1);
        printf("%lld %lld %lld %lld\n",ans,ansa,ansb,ansc);
    }
}

我死了

2022/7/9 21:26
加载中...