借尸还魂

题面传送门

这是一个数学题

首先,我们可以推出\(a+b+c+d=3a+4b\),那么这个时候我们如果枚举a的话,会超时
那么怎么办呢

我们想一下,当\(a>4\)的时候,其实\(3a+4b=3(a-4)+4(b+3)\),那么这个是不优的
所以a只需要枚举到4就可以

#include<bits/stdc++.h>
using namespace std;
#define int long long

int n;

int gen(int nowA,int x){
    int r1=max(nowA+1,x/4);
    int r2=max(nowA+1,x/4+1);
    if(abs(x-r1*4)<abs(x-r2*4))
        return r1;
    else 
        return r2;
}

void solve(){
    cin>>n;
    int a=1,b=2;
    for(int i=1;i<=100;i++){
        int j=gen(i,n-3*i);
        if(abs(n-3*i-4*j)<abs(n-3*a-4*b))
            a=i,b=j;
    }
    cout<<a<<' '<<b<<' '<<a+b<<' '<<a+b+b<<endl;
}

signed  main(){
    cin.tie(0)->sync_with_stdio(0);
    freopen("jie.in","r",stdin);
    freopen("jie.out","w",stdout);
    int q=1;
    //cin>>q; 
    while(q--)
        solve();
}

树穴体!

0 条评论

目前还没有评论...