当前位置:网站首页>【2022杭电多校5 1012题 Buy Figurines】STL的运用
【2022杭电多校5 1012题 Buy Figurines】STL的运用
2022-08-04 20:44:00 【宇智波一打七~】
题目描述
输入
输出
样例输入
1
5 3
2 4
1 3
5 1
3 4
4 2
样例输出
7
题意
有n个人去买东西,有m个窗口,每个人都有到达时间和花费时间,每个人到的时候都是挑一条人少的队排,如果有两个以上的队人最少的话就挑序号最小的队排,问多少时间的时候所有人全部买完。
思路
因为这个过程是确定性的过程,比较清晰,所以就是个模拟题,至于怎么模拟这个就需要点技巧了,如果对于每一个人都O(m)的查询每个队列的长度的话那么复杂度就太高了,所以说我们可以维护一个set,这个set里面的节点信息是每个队列的人数和标号,然后再维护一个优先队列,这个优先队列里面的每一个节点信息是时间,人的编号,出队/入队,然后是按照时间来排的,如果时间相同,那么按照先出队后入队来排,然后就是模拟的过程了,具体可以看代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
typedef long long LL;
typedef pair<int,int> PII;
struct Que{
LL tim;
int id,status;
bool operator<(const Que&t)const{
if(tim == t.tim) return status > t.status;
return tim > t.tim;
}
Que(LL a=0,int b=0,int c=0):tim(a),id(b),status(c){
}
};
struct mdui{
LL num;
int id;
bool operator<(const mdui&t)const{
if(num == t.num) return id < t.id;
return num < t.num;
}
mdui(LL a=0,int b=0):num(a),id(b){
}
};
mdui q[N];
priority_queue<Que> que;
PII data[N];
set<mdui> dui;
LL last[N];
int Queselect[N];
void solve(){
dui.clear();
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d%d",&data[i].first,&data[i].second);
que.push(Que(data[i].first,i,1));
}
for(int i=1;i<=m;i++){
last[i] = 0;q[i].id = i;q[i].num = 0;
dui.insert(q[i]);
}
while(que.size()){
auto t = que.top();que.pop();
LL tim = t.tim;
int id = t.id,status = t.status;
if(t.status == 0){
int x = Queselect[id];
dui.erase(mdui(q[x].num,q[x].id));
dui.insert(mdui(--q[x].num,q[x].id));
}
else{
auto x = *dui.begin();
dui.erase(x);
if(x.num == 0) last[x.id] = tim + data[id].second;
else last[x.id] += data[id].second;
q[x.id].num ++,x.num++;
Queselect[id] = x.id;
dui.insert(x);
que.push(Que(last[x.id],id,0));
}
}
LL ans = 0;
for(int i=1;i<=m;i++) ans = max(ans,last[i]);
printf("%lld\n",ans);
}
int main(){
int _;
scanf("%d",&_);
while(_--) solve();
return 0;
}
边栏推荐
- 使用百度EasyDL实现森林火灾预警识别
- vscode离线安装插件方法
- 刷题-洛谷-P1179 数字统计
- [Academic related] Tsinghua professor persuaded to quit his Ph.D.:I have seen too many doctoral students have mental breakdowns, mental imbalances, physical collapses, and nothing!...
- C#将对象转换为Dictionary字典集合
- Oreo域名授权验证系统v1.0.6公益开源版本网站源码
- [Data Mining] Written Exam Questions for Sohu Data Mining Engineers
- 刷题-洛谷-P1200 你的飞碟在这儿Your Ride Is Here
- 数据安全解决方案的发展
- ASP.NET商贸进销存管理系统源码(带数据库文档)源码免费分享
猜你喜欢
随机推荐
Matlab画图2
C语言——青蛙跳台阶(递归)
ASP.NET商贸进销存管理系统源码(带数据库文档)源码免费分享
格密码入门
win10 uwp modify picture quality compress picture
IPV6地址
Feign 与 OpenFeign
实现菜单拖拽排序
深度解析:为什么跨链桥又双叒出事了?
【数据挖掘】搜狐公司数据挖掘工程师笔试题
Win10 uwp use ScaleTransform magnify an element
Chrome安装zotero connector 插件
多商户商城系统功能拆解22讲-平台端分销商品
jMeter Thread group 对应的 constant timer
37.轮播图
web漏洞扫描器-awvs
adb控制常用命令
伺服电机矢量控制原理与仿真(1)控制系统的建立
Elastic Search 根据匹配分和热度分排序
【TypeScript】深入学习TypeScript枚举