https://codeforces.com/contest/1106/problem/B

C++版本一

题解:

贪心

按价格排序,作为不足时的取菜顺序,设一个指针记录,如果指针到n+1,说明没有菜可以取了

/*
*@Author:   STZG
*@Language: C++
*/
#include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<deque>
#include<stack>
#include<cmath>
#include<list>
#include<map>
#include<set>
//#define DEBUG
#define RI register int
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=100000+10;
const int MOD=1e9+7;
const double PI = acos(-1.0);
const double EXP = 1E-8;
const int INF = 0x3f3f3f3f;
ll t,n,m,k,q,d;
ll ans,cnt,flag,temp;
ll a[N];
ll c[N];
char str;
struct node{ll id,c;bool operator <(const node &S)const{return c<S.c;}
}e[N];
int main()
{
#ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout);
#endifscanf("%I64d%I64d",&n,&m);for(int i=1;i<=n;i++){scanf("%I64d",&a[i]);}for(int i=1;i<=n;i++){scanf("%I64d",&e[i].c);e[i].id=i;c[i]=e[i].c;}sort(e+1,e+n+1);int pos=1;while(m--){scanf("%I64d%I64d",&t,&d);ans=0;if(a[t]>0){if(a[t]>=d){ans+=c[t]*d;a[t]-=d;d=0;}else{ans+=c[t]*a[t];d-=a[t];a[t]=0;}}while(d>0&&pos<=n){
//cout<<e[pos].id<<" "<<a[e[pos].id]<<d<<" "<<ans<<endl;if(a[e[pos].id]>0){if(a[e[pos].id]>=d){ans+=c[e[pos].id]*d;a[e[pos].id]-=d;d=0;}else{ans+=c[e[pos].id]*a[e[pos].id];d-=a[e[pos].id];a[e[pos].id]=0;pos++;}}else{pos++;}}if(d>0){ans=0;}cout<<ans<<endl;}//cout << "Hello world!" << endl;return 0;
}

C++版本二

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
#include<string.h>
#include<queue>
#include<algorithm>
#include<vector>
#define ll long long
#define pb push_back
#define INF 0x3f3f3f3f;
#define test printf("here!!!")
using namespace std;
const int mx=1e5+10;
const int mod=998244353;
struct Node
{int v;int id;
}hgf,dzb;
bool operator <(const Node &a,const Node &b)
{if (a.v!=b.v) return a.v>b.v;else return a.id>b.id;
}
priority_queue<Node>q;
int a[mx];
int c[mx];
int vis[mx];
int main()
{int n,m,t,d;scanf("%d%d",&n,&m);for (int i=1;i<=n;++i) scanf("%d",&a[i]);for (int i=1;i<=n;++i){scanf("%d",&c[i]);hgf.v=c[i];hgf.id=i;q.push(hgf);}while (m--){ll cost=0;scanf("%d%d",&t,&d);if (a[t]>=d){a[t]-=d;cost=1ll*d*c[t];if (a[t]==0) vis[t]=1;d=0;}else{cost=1ll*a[t]*c[t];d-=a[t];a[t]=0;vis[t]=1;while (d&&!q.empty()){dzb=q.top();q.pop();if (a[dzb.id]>=d&&!vis[dzb.id]){a[dzb.id]-=d;cost+=1ll*d*dzb.v;d=0;if (a[dzb.id]==0) vis[dzb.id]=1;else{q.push(dzb);}}else if (a[dzb.id]<d&&!vis[dzb.id]){cost+=1ll*a[dzb.id]*dzb.v;d-=a[dzb.id];a[dzb.id]=0;vis[dzb.id]=1;}}}if (d) printf("0\n");else printf("%I64d\n",cost);}
}

Lunar New Year and Food Ordering相关推荐

  1. Codeforces Round #536 (Div. 2) B. Lunar New Year and Food Ordering

    题意:有n种菜,m位顾客,每种菜都有它们的数量ai与价值ci:m位顾客,每一位顾客选择i-th种菜,数量为y,若i-th数量不够,则选择其他菜.若所有的菜都已售完,而顾客未能点满y道菜,顾客则会生气离 ...

  2. eShopOnContainers 知多少[8]:Ordering microservice

    1. 引言 Ordering microservice(订单微服务)就是处理订单的了,它与前面讲到的几个微服务相比要复杂的多.主要涉及以下业务逻辑: 订单的创建.取消.支付.发货 库存的扣减 2. 架 ...

  3. R语言对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案

    R语言对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法.data.table.dplyr等方案 目录

  4. R语言基于多字段(多数据列、multiple columns)对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案

    R语言基于多字段(多数据列.multiple columns)对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法.data.table.dplyr等方案 目录

  5. 以太坊搭建,不能使用puppeth 创建初始块,报错Fatal: Failed to write genesis block: unsupported fork ordering: eip15

    以太坊搭建,不能使用puppeth 创建初始块,报错Fatal: Failed to write genesis block: unsupported fork ordering: eip15 新建 ...

  6. Guava之Ordering

    Ordering类提供了一些链式的排序方法,相比JDK自带的排序方法更加简练.方便. Ordering中有3种静态方法用于创建Ordering排序器: 根据上面的方法创建Ordering后,可以继续调 ...

  7. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  8. Scala比较器:Ordered与Ordering

    在项目中,我们常常会遇到排序(或比较)需求,比如:对一个Person类 case class Person(name: String, age: Int) {override def toString ...

  9. CERC17 Problem L - Lunar Landscape(差分,坐标系)

    CERC17 Problem L - Lunar Landscape Solution 如果只有AAA,我们可以简单地使用差分解决. 加入了BBB之后,可以把单位正方形用对角线拆成四个等腰Rt,统计等 ...

最新文章

  1. SSMS2008插件开发(3)--部署调试SSMS2008插件
  2. 【Visual Studio 扩展工具】使用ComponentOne中的GroupDefinition和SortDefinition属性保存和还原布局...
  3. 两条平行导线同向电流_电磁学(9)——磁场对电流的作用,安培力
  4. Android开发之Retrofit常见错误@FieldMap parameters can only be used with form encoding. (parameter #1)
  5. 如何在Safari中查看网页的完整URL
  6. Java EE 6示例– Galleria –第3部分
  7. 为什么脚本执行一行就不动了_在Linux中通过expect工具实现脚本的自动交互
  8. 免校准的电量计量芯片_单相电能表如何校准(单相电能计量芯片+MCU)
  9. UPUPW数据库密码的修改
  10. 参加西安第三届数字油田高端论坛暨第二届国际学术会议
  11. R语言︱分布函数与概率密度+随机数产生
  12. AD元件库安装与使用
  13. JS高级程序设计精简版(第十章:函数)附思维导图
  14. Originpro使用技巧
  15. 根据自己的词汇量阅读英语原著
  16. tablayou设置固定下划线和根据文字显示长短显示下划线
  17. 伤寒杂病论.辨太阳病脉证并治(中)
  18. 5.5leecode刷题记录(leecode704.二分查找,leecode.27移除元素)
  19. 听好程序员一句劝!零基础这样学Java才是正确的方式!
  20. php怎么判断qq内置浏览器,如何判断微信内置浏览器(JS PHP)

热门文章

  1. python单例模式数据库连接池_Python实现单例模式的四种方式
  2. 单片机用python还是c语言_单片机为什么一直用C语言,不用其他编程语言?
  3. android 保存流媒体,Android实现使用流媒体播放远程mp3文件的方法
  4. python写彩票抓取_Python|爬取彩票数据
  5. 7系列mrcc xilinx_XILINX 7系列FPGA_时钟篇
  6. matlab超出矩阵索引维度_搜你想看“头条搜索”网页版上线 搜索引擎迎来新玩家...
  7. python创建excel图表_Python:使用图表创建Excel工作表
  8. java中英对比_2017-11-09 中英文代码对比系列之Java一例
  9. 七十三、Python | Leetcode数字系列(上篇)
  10. kaggle研究生招生(中)