题解:P14789 [NERC 2025] Honey Cake

· · 题解

P14789 [NERC 2025] Honey Cake 题解

题目传送门

题目大意

给定一个大小为 w \times h \times d 的立方体,要求切出 n 块大小相等的立方体且切完后的立方体长宽高都是整数,输出长宽高分别的切割次数。

做法分析

枚举 n 的因子存到一个数组里,然后枚举每一个因子,看看能不能整除,输出每条边的切割次数。

代码实现

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define kuaitou ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define baoliu(n) fixed<<setprecision(n)
vector<int> a; 
int main(){
    kuaitou;
    long long x,y,z,n,b;
    cin>>x>>y>>z>>n;
    for(int i=1;i*i<=n;i++){//如果是n的因子就加入数组
        if(n%i==0){
            a.push_back(i);
            if(n/i!=i){
                a.push_back(n/i);
            }
        }
    }
    //枚举数组
    for(size_t i=0;i<a.size();i++){
        for(size_t j=0;j<a.size();j++){
            if(n%(a[i]*a[j])!=0){//如果不能被整除
                continue;
            }
            b=n/(a[i]*a[j]);//另一条边的切割次数
            if(x%a[i]==0&&y%a[j]==0&&z%b==0){//如果都能被整除
                cout<<a[i]-1<<" "<<a[j]-1<<" "<<b-1;//输出
                return 0;
            }
        }
    }
    cout<<"-1";
    return 0;
} 

AC记录