QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#806760 | #9408. Hero of the Kingdom | jiangzhihui | RE | 0ms | 0kb | C++14 | 1.3kb | 2024-12-09 14:53:30 | 2024-12-09 14:53:30 |
answer
#include<bits/stdc++.h>
using namespace std;
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;//当前能买多少袋
int z=bg*(q-p);//当前一次性能赚这么多钱
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;
}
int 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