help

P6188 [NOI Online #1 入门组] 文具订购

Tanghaohan123456 @ 2024-07-20 17:16:33

why tle

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

int main(){
    int n, s = 0, t, ans=-1;
    cin>>n;
    for(int i=1;i<=20000;i++){
        for(int j=1;j<=25000;j++){
            for(int k=1;k<=40000;k++){
                if(7*i+4*j+3*k == n){
                    if(i<j){
                        if(i<k){
                            t=i;
                        }
                        else{
                            t=k;
                        }
                    }
                    else{
                        if(j<k){
                            t=j;
                        }
                        else t=k;
                    }
                    if(t>=s){
                        s=t;
                        ans=max(i+j+k,ans);
                    }
                }
            }
        }
    }
    cout<<ans;
    return 0;
}

by Wang_Xu @ 2024-08-12 21:08:27

@Tanghaohan123456 你循环了20000000000000次2*10的18次方,肯定会超,计算机一秒只能循环10的9次方


by Wang_Xu @ 2024-08-12 21:15:22

@Tanghaohan123456 AC代码

#include<bits/stdc++.h> 
using namespace std;
int main()
{
    long long n,a,b,c;
    cin>>n;
    for(a=n/14;a>=0;a--)
    {
        for(b=a;b<=n;b++)
        {
            for(c=a;c<=n/3;c++)
            {
                if(7*a+4*b+3*c==n)
                {
                    cout<<a<<" "<<b<<" "<<c<<endl;
                    return 0;
                }
            }
        }
    }
    cout<<"-1";
    return 0;
}

|