CE 求助
  • 板块灌水区
  • 楼主qinghaipeng
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/9/27 20:31
  • 上次更新2023/11/2 17:48:53
查看原帖
CE 求助
690333
qinghaipeng楼主2023/9/27 20:31
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<memory.h>
#include<cstdlib>
#include<ctime>
#include<climits>
#include<cctype>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<bitset>
#include<map>
#include<unordered_map>
#include<stack>
#include<vector>
#include<queue>
#include<deque>
#include<list>
#include<utility>
#define bug puts("liupei")
#define int long long
#define F(i,j,n) for(register int i=j;i<=n;++i)
#define R(i,j,n) for(register int i=j;i>=n;--i)
#define MAX_TIME 0.95
#define pii pair<int,int>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int N=2e5+50;
const bool debug=1;
const int mod=998244353;
int n,t;
int p[N];//这题比 T3 多了一个价格 
struct works{
	int t1;
	int t2;//t1 是要花费的时间,t2 是终止时间 
	int id;
	bool operator >(works &B){
		return 	t1>B.t1;
	}
	bool operator ==(works &B){
		return 	t1==B.t1;
	}
	bool operator <(works &B){
		return 	t1<B.t1;
	}
	bool operator <=(works &B){
		return 	t1<=B.t1;
	}
	bool operator >=(works &B){
		return 	t1>=B.t1;
	}
}a[N];
priority_queue<works,vector<works> >q;//临时存的时间 
inline bool cmp(works x,works y){
	return x.t2<y.t2;
}
signed main() {
	freopen("work.in","r",stdin);
//	freopen("work.out","w",stdout);
	srand(time(0));
	scanf("%lld",&n);
	F(i,1,n)scanf("%lld%lld",&a[i].t2,&p[i]);
	F(i,1,n)a[i].t1=1,a[i].id=i;//每个只用一天干 
	if(debug){
		bug;
	}
	sort(a+1,a+1+n,cmp);
	F(i,1,n){
		if(t+a[i].t1<=a[i].t2){
			q.push(a[i]);
			t+=a[i].t1;
		}else{
			if(q.top().t1>a[i].t1){
				t=t+a[i].t1-q.top().t1;
				q.pop();
				q.push(a[i]);
			}
		}
	}
	register int ans=0;
	works now;
	while(!q.empty()){
		now=q.top();
		ans+=p[now.id];
//		q.pop();
	}
	printf("%lld",ans);
	return 0;
}

提示我大于、小于那些没定义,可是在结构体中不是有定义吗。

2023/9/27 20:31
加载中...