列表

详情


NC22604. 小A与任务

描述

小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务
第 i 个任务需要花费  x_i 的时间,同时完成第 i 个任务的时间不能晚于 y_i ,时间掌控者向小A提出了一个条件:如果完成第 i 个任务的时间本应是 t ,但小A支付 m 个金币的话,他可以帮助小A在   时刻完成第 i 个任务, z_i 是时间参数,会在输入中给出
小A想按时完成所有任务,请你帮他制定一个花费金币最少的方案
注意:不能使得某个任务的花费时间小于 0 ,花费的金币可以不是整数

输入描述

第一行一个整数 n ,表示小A的任务数量
接下来n行,每行三个整数,分别表示 z_i,x_i,y_i

输出描述

一行一个实数,表示小A最少需要花费的金币数,四舍五入保留一位小数

示例1

输入:

5
1 1 2
1 1 3
1 2 4
1 1 4
1 2 5

输出:

2.0

说明:

在1时刻完成第一个任务,2时刻完成第二个任务,4时刻完成第三个任务,花费1金币在4时刻完成第四个任务,花费1金币在5时刻完成第五个任务

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 231ms, 内存消耗: 2872K, 提交时间: 2022-11-23 15:43:38

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+100;
struct node{
    int z,x,y;
    bool operator < (const node &b)const {
        return z<b.z;
    }
}e[N];

bool cmp(node a,node b)
{
    return a.y<b.y;
}

signed main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)    cin>>e[i].z>>e[i].x>>e[i].y;
    sort(e+1,e+n+1,cmp);
    priority_queue<node>q;
    double ans=0;
    int res=0;
    for(int i=1;i<=n;i++)
    {
        q.push(e[i]);
        res+=e[i].x;
        while(res>e[i].y)
        {
            auto no=q.top();q.pop();
            int t=min(res-e[i].y,no.x);
            res-=t;
            ans+=(double)t/no.z;
            no.x-=t;
            if(no.x)    q.push(no);
        }
    }
    printf("%.1f\n",ans);
    return 0;
}

C++ 解法, 执行用时: 234ms, 内存消耗: 2916K, 提交时间: 2022-06-12 16:55:01

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y,z;//x代表任务时间 y代表截止时间 z代表花费参数 
	bool operator < (const node&n)const{
		return z<n.z;
	} 
}a[200010];
bool cmp(node n1,node n2){
	return n1.y<n2.y;
}
priority_queue<node>q;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i].z>>a[i].x>>a[i].y;
	sort(a+1,a+1+n,cmp);
	int time=0;
	double ans=0;
	for(int i=1;i<=n;i++){
		q.push(a[i]);
		time+=a[i].x;
		while(a[i].y<time){
			node p=q.top();
			q.pop();
			int temp=min(time-a[i].y,p.x);
			time-=temp;
			ans+=temp*1.0/p.z;
			p.x-=temp;
			if(p.x)q.push(p);
		}
	}
	printf("%.1lf\n",ans);
}

上一题