题目

题目:cf536 B题

题目大意:一个饭店有n种食物,每种食物有对应的价格和数量,然后有m个顾客,每个顾客需要$d_j$份第$t_j$种食物,如果该种食物数量不够,则选其它尽可能便宜的代替(出现同样价格的应选索引最小的);如果所有的食物都不够该顾客,该顾客会吃完这些食物,并且不花钱。假设只有当前一个顾客服务完下一个才会来。

思路

模拟,根据题目所说的去做即可。唯一的困难是得到最便宜的食物,这需要对食物进行排序,由于同时还要记录原来的索引,所以用pair存储,放在优先队列中。

时间复杂度:$\mathcal{O}(m + n \log n)$

代码

 #include<cstdio>
#include<algorithm>
#include<queue>
using namespace std; typedef long long LL;
typedef pair<int,int> PII; const int maxn = + ;
int n, m,r[maxn],c[maxn];
priority_queue<PII, vector<PII>, greater<PII>>Q; //优先第一维比较,第一维相同则根据第二维 int main()
{
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++) scanf("%d", &r[i]);
for (int i = ; i <= n; i++)
{
scanf("%d", &c[i]);
Q.push(PII(c[i], i));
}
for (int i = ; i <= m; i++)
{
int t, d;
scanf("%d%d", &t, &d);
if (d <= r[t])
{
r[t] -= d;
printf("%lld\n", 1LL * d * c[t]);
}
else
{
bool flag = false;
LL ans = 1LL * r[t] * c[t];
d -= r[t];
r[t] = ;
while (!Q.empty())
{
while (!Q.empty() && r[Q.top().second] == ) Q.pop();
if (Q.empty()) break;
PII now = Q.top();
if (d <= r[now.second])
{
r[now.second] -= d;
ans += 1LL * d * now.first;
flag = true;
printf("%lld\n", ans);
break;
}
else
{
ans += 1LL * r[now.second] * now.first;
d -= r[now.second];
r[now.second] = ;
Q.pop();
}
}
if (!flag) printf("0\n");
}
}
return ;
}

参考链接:https://codeforces.com/blog/entry/64928

最新文章

  1. nodejs net模块
  2. 产品中 configure/cross compile的一个bug
  3. Docker + Consul 多数据中心模拟
  4. Mergely – 免费的在线文档对比和合并工具
  5. Android文件保存和读取
  6. .net core 中的序列化和反序列化
  7. mysql kill操作
  8. Struts2 教程
  9. xen credit scheduler and policy
  10. inode-软链接与硬链接
  11. HDU OJ 5441 Travel 2015online E
  12. Linux下给mysql创建用户分配权限
  13. kafka各个版本特性预览介绍
  14. day21-多并发编程基础(二)
  15. mysql 数据库主从同步
  16. Django学习笔记之视图高级-错误处理
  17. nginx代理 upstream轮询
  18. 【linux C】C语言中常用的几个函数的总结【一】
  19. python输出显示颜色
  20. MySQL keepalived 双主.md

热门文章

  1. 织梦仿站列表页pagelist分页显示竖排,如何修改成横排?
  2. web前端技术社区分享
  3. 并不对劲的bzoj3998:loj2102:p3975:[TJOI2015]弦论
  4. [Usaco2009 Dec] 过路费
  5. django flask缓存memcache的key生成方法介绍
  6. 洛谷 P1262 间谍网络 —— 缩点
  7. 【黑金教程笔记之004】【建模篇】【Lab 03 消抖模块之一】—笔记
  8. P2479 [SDOI2010]捉迷藏
  9. _bzoj1008 [HNOI2008]越狱【计数】
  10. d3学习笔记