求调(悬赏1关)
  • 板块灌水区
  • 楼主Martlet
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/17 17:24
  • 上次更新2023/11/3 03:06:07
查看原帖
求调(悬赏1关)
543717
Martlet楼主2023/8/17 17:24

link

思路就是贪心+模拟

WA了

#include<bits/stdc++.h>
using namespace std;
const int maxn = 500500+10;
int n,S;
long long ans;
int b[maxn];
struct kkk{
	long long s;int die;
	bool operator < (const kkk& A) const{
		return die < A.die;								 
	}
}res[maxn];

int main(){
	//freopen("resin.in","r",stdin);
	//freopen("resin.out","w",stdout);
	cin>>n>>S;
	set<kkk> q;
	for(int i = 1;i <= n;i++){
		cin>>res[i].s>>b[i];
		res[i].die = i+S;
		q.insert(res[i]);
		if((*q.begin()).die == i){
			q.erase(*q.begin());
		}
		int cnt = 0;
		while(b[i] > 0&&!q.empty()){
			kkk tmp = (*q.begin());
			//cout<<tmp.s<<endl;
			if(b[i] <= tmp.s){
				ans+=b[i];
				b[i] = 0;
				tmp.s -= b[i];
				q.erase(*q.begin());
				q.insert(tmp);
				break;
			}
			else if(b[i] > tmp.s){
				ans+=tmp.s;
				b[i] -= tmp.s;
				tmp.s = 0;
				q.erase((*q.begin()));
			}
		}
	}
	
	cout<<ans;
	return 0;
}

测试点

2023/8/17 17:24
加载中...