P1833 樱花80分求调(回复有用的就关注)
  • 板块灌水区
  • 楼主____QAQ____
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/2 16:23
  • 上次更新2024/7/2 18:54:07
查看原帖
P1833 樱花80分求调(回复有用的就关注)
1123756
____QAQ____楼主2024/7/2 16:23
#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

2024/7/2 16:23
加载中...