题解:P14789 [NERC 2025] Honey Cake

· · 题解

题目传送门

思路

这题我们可以从 n 切入。

我们可以先预处理出 n 的因数,再在 n 的因数中枚举长和宽各需要多少块,并且通过 n 算出高需要多少块,最后判断这些块数符不符合蜂蜜蛋糕的长宽高的尺寸要求即可。

注意要判断高不是整数块的情况。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int w,h,d,n,a[10000005],cnt;
signed main(){
    cin>>w>>h>>d>>n;
    for(int i=1;i<=(int)(sqrt(n));i++)
    {
        if(n%i==0)
        {
            a[++cnt]=i;
            if(i*i!=n)  a[++cnt]=n/i;
        }
    }
    sort(a+1,a+cnt+1);//预处理因数
    for(int i=1;i<=cnt;i++)
    {
        for(int j=1;j<=cnt;j++)
        {
            if(n%(a[i]*a[j])!=0)  continue;//判断高是否是整数块
            if(w%a[i]==0&&h%a[j]==0&&d%(n/a[i]/a[j])==0&&n%(a[i]*a[j])==0)  
            {
                cout<<a[i]-1<<" "<<a[j]-1<<" "<<(n/a[i]/a[j])-1;
                return 0;
            }//判断符不符合蜂蜜蛋糕尺寸
        }
    }
    cout<<-1;//无解
    return 0;
}