博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #536 (Div. 2) B. Lunar New Year and Food Ordering(思维)
阅读量:3899 次
发布时间:2019-05-23

本文共 1311 字,大约阅读时间需要 4 分钟。

【题目】

【题解】

这道题的主要问题在于,题干比较难读hhh

题意:饭店有n种菜,编号为i∈[1,n]的菜的初始量为ai,价格为bi。有m个客人,每个客人会点d盘编号为t的菜。假设此时的菜的余量为ri,如果ri充足,那么给客人上d盘编号为t的菜,正常消费;如果ri不足,那么剩下的盘数将由剩余最便宜的菜代替,如果价格一样低,编号小的优先被代替;如果ri不足并且没有足够的其他的菜,那么客人会生气的走掉,消费为0并且会拿走之前消费的菜。

思路:能上t就上t,不能上t就最便宜,按菜品消费。如果剩下所有盘数都不足d,那么客人肯定会生气的走掉,并且之后的客人都会生气因为余量为0。问题在于,寻找最便宜需要排序,但是客人直接点编号为t的菜时又不能被排序不然不能直接减掉被消费的菜和计算消费价格。思考了一下,我们只需要按价格和序号对序号排个序即可,然后定义pos存储当前最小的菜品的编号,每次分类讨论即可。

还有一点,第一发wa了,然后改成long long才过的。

我可真是个小机灵鬼儿~  

【代码】

#include
using namespace std;typedef long long ll;struct p{ ll num; ll cc;}f[100005];bool cmp(p x,p y){ if(x.cc==y.cc) return x.num
=d) sum-=d; else { puts("0"); sum=0; continue; } ll ans=0; if(a[t]>=d) ans=d*c[t],a[t]-=d; else { d-=a[t]; ans+=a[t]*c[t],a[t]=0; while(d) { while(a[f[pos].num]==0) pos++; ll poss=f[pos].num; if(a[poss]>=d) { a[poss]-=d,ans+=d*c[poss]; d=0; } else { ans+=a[poss]*c[poss]; d-=a[poss]; a[poss]=0; } } } printf("%I64d\n",ans); } return 0;}

 

转载地址:http://sfben.baihongyu.com/

你可能感兴趣的文章
使用gdb调试运行时的程序小技巧
查看>>
linux后端服务程序之信号处理
查看>>
Padding也要小心
查看>>
linux异步IO编程实例分析
查看>>
小组开发环境搭建: apache+ftp+cvs+samba
查看>>
Learning C with gdb
查看>>
不可不知的json库
查看>>
JSON格式解析和libjson使用简介
查看>>
关于Json格式的理解
查看>>
c语言解析json数据
查看>>
一个C实现的记日志的函数库
查看>>
C语言简单实现日志功能的的题目
查看>>
C 实现的 日志模块
查看>>
C语言实现简单的分级别写日志程序
查看>>
深入理解HTTP Session
查看>>
理解TCP中的三次握手
查看>>
linux session 浅谈
查看>>
Emacs 中文学习手册-1
查看>>
Emacs学习笔记(1):初学者的学习计划
查看>>
Emacs学习笔记(13):在Emacs中打开pdf
查看>>