QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#806777#9408. Hero of the KingdomjiangzhihuiRE 0ms0kbC++141.6kb2024-12-09 15:03:192024-12-09 15:03:20

Judging History

你现在查看的是最新测评结果

  • [2024-12-09 15:03:20]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2024-12-09 15:03:19]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
/*
1
5 2 0
8 1 3
17 6
*/
    int p,a,b,q,c,d,m,t;
    cin>>p>>a>>b;
    cin>>q>>c>>d;
    cin>>m>>t;
    while(t>=a+c+b+d){//至少剩余时间要能再买一袋才可
        int bg=m/p;//当前的钱能买多少袋
        // cout<<bg<<endl;
        int z=bg*(q-p);//当前一次性能赚这么多钱

        // 如果买一次的时间都不够怎么办:
        if(t<((bg)*(a+c)+b+d)){
            // cout<<(t-b-d)/(a+c)<<endl;
            cout<<m+(t-b-d)/(a+c)*(q-p)<<endl;
            return ;
        }

        if((z+m)/p == bg){//买一次后钱不够
            //多买一袋需要的钱是
            int zm=(bg+1)*p;
            //若时间足够那我直接买到能多买一袋为止的次数
            int cm=ceil(1.0*(zm-m)/(q-p));//需合并的c次
            //若时间不足
            int ct=t/((a+c)*bg+b+d);
            if(ct<cm){//时间不足最后一次交易
                m+=ct*z;
                cout<<m<<endl;
                return ;
            }else{//按原计划进行cm次
                m+=cm*z;
                t-=(cm)*((a+c)*bg+b+d);
            }
        }else{//一次一次买
            //时间可能不够
            // if(t<((bg)*(a+c)+b+d)){
            //     cout<<m+(t-b-d)/(a+c)*(q-p)<<endl;
            //     return ;
            // }
            t-=((bg)*(a+c)+b+d);
            m+=z;
        }
    }
    cout<<m<<endl;
}
signed main(){
    int qes;
    cin>>qes;
    while(qes--)solve();
    return 0;
}

详细

Test #1:

score: 0
Runtime Error

input:

3
5 2 3
8 1 5
14 36
5 2 0
8 1 3
17 6
100 1 0
10000 1 0
99 100000

output:

32
20

result: