#include<bits/stdc++.h>
using namespace std;
string s1,s2;
struct Node{
double t,c,p;
double val;
}node[10001];
int n;
int cal(string s){
int h,m;
if(s[1]==':')h=(s[0]-'0')*60;
else h=((s[0]-'0')*10+(s[1]-'0'))*60;
if(s[1]==':'&&s.size()==4)m=(s[2]-'0')*10+(s[3]-'0');
else if(s[1]==':'&&s.size()==3)m=s[2]-'0';
else if(s[2]==':'&&s.size()==4)m=s[3]-'0';
else if(s[2]==':'&&s.size()==5)m=(s[3]-'0')*10+(s[4]-'0');
return h+m;
}
bool cmp(Node A,Node B){
if(A.val!=B.val)return A.val>B.val;
else return A.t<B.t;
}
int main(){
cin>>s1>>s2>>n;
int t=cal(s2)-cal(s1);
for(int i=1;i<=n;i++){
cin>>node[i].t>>node[i].c>>node[i].p;
node[i].val=node[i].c/node[i].t;
}
sort(node+1,node+n+1,cmp);
int ans=0,cost=t;
for(int i=1;i<=n;i++){
if(node[i].p==0)node[i].p=1e9;
if(node[i].p*node[i].t<=cost){
cost-=node[i].p*node[i].t;
ans+=node[i].c*node[i].p;
}
else {
int x=cost/node[i].t;
cost-=x*node[i].t;
ans+=x*node[i].c;
}
}
cout<<ans;
return 0;
}
不会题解里的写法
思路: 1.算出每一个樱花在一分钟里能获得多少值
2.用算出来的值为他们排序
3.贪心取值,如可以把当前樱花次数用完就用完,用不完就尽量用,不能用就去下一个
求回复怎么改AC QAQ