如何解释?
查看原帖
如何解释?
1155764
ouxiyao楼主2024/8/1 20:44
#include<iostream>
#include<cstdio> 
#include<queue>
#include<algorithm>
using namespace std;
struct shi{
	int sj,lr;
	bool operator<(shi &p){
		if(p.sj==sj)return lr>p.lr;
		else return sj<p.sj;
	}
}a[100010];
priority_queue<int,vector<int>,greater<int> >q;
int main(){
	int n;
	scanf("%d\n",&n);
	for(int i = 1;i<=n;i++){
		scanf("%d %d",&a[i].sj,&a[i].lr);
		q.push(a[i].sj) ;
	}
	sort(a+1,a+1+n);
	int x = 0;
	long long cnt = 0;
	for(int i = 1;i<=n;i++){
		if(x>=q.top())q.pop();
		else{
			cnt+=a[i].lr;
			x++;
			q.pop();
		}
	}
	printf("%lld",cnt);//33分
	return 0;
}
#include<iostream>
#include<cstdio> 
#include<queue>
#include<algorithm>
using namespace std;
struct shi{
	int sj,lr;
	bool operator<(shi &p){
		if(p.sj==sj)return lr>p.lr;
		else return sj<p.sj;
	}
}a[100010];
priority_queue<int,vector<int>,greater<int> >q;
int main(){
	int n;
	scanf("%d\n",&n);
	for(int i = 1;i<=n;i++){
		scanf("%d %d",&a[i].sj,&a[i].lr);
	}
	sort(a+1,a+1+n);
	int x = 0;
	unsigned long long t = 0;
	for(int i = 1;i<=n;i++){
		t+=a[i].lr;
		q.push(a[i].lr);
		if(x<a[i].sj){
			x++;
		}
		else {
			t-=q.top();
			q.pop();
		}
	}
	printf("%lld",t);//100分
	return 0;
}

一个正确才加,一个加了再说,错了再减,为啥不一样???

2024/8/1 20:44
加载中...