「CF521D」 Shop
「CF521D」 Shop
题目说是有三种操作,首先可以知道赋值操作是可以转化为加法操作的,即 \((1,b) \rightarrow (2,b-a_i)\)
然后加法对于一个数你肯定优先选择大的加上去,这样规定了加法顺序之后加法操作也能转变为乘法操作。
然后现在只有乘法操作了,直接从大到小排一遍即可。
值得注意的是,选择了前 \(m\) 大的乘法操作之后,操作顺序需要按照 赋值->加法->乘法 的顺序进行,若顺序不对显然会使应得的答案变小。
代码:
/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
long long mx[maxn],id[maxn];
long long a[maxn],opt[maxn];
vector<pair<int,int> > add[maxn];
vector<pair<long double,int> > mul;
bool cmp(pair<long double,int> a,pair<long double,int> b){
return opt[a.second]<opt[b.second];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int k,n,m;cin>>k>>n>>m;
for(int i=1;i<=k;++i) cin>>a[i];
for(int i=1;i<=n;++i){
long long a,b;cin>>opt[i]>>a>>b;
if(opt[i]==1){
if(mx[a]<b) mx[a]=max(mx[a],b),id[a]=i;
}
if(opt[i]==2){
add[a].emplace_back(b,i);
}
if(opt[i]==3){
mul.emplace_back(b,i);
}
}
for(int i=1;i<=k;++i) if(mx[i]>a[i]) add[i].emplace_back(mx[i]-a[i],id[i]);
for(int i=1;i<=k;++i){
sort(add[i].begin(),add[i].end());
reverse(add[i].begin(),add[i].end());
for(auto x:add[i]){
int u,v;tie(u,v)=x;
mul.emplace_back(1.0*(a[i]+u)/a[i],v);
a[i]+=u;
}
}
int cnt=min(m,(int)mul.size());
cout<<cnt<<'\n';
sort(mul.begin(),mul.end());
reverse(mul.begin(),mul.end());
sort(mul.begin(),mul.begin()+cnt,cmp);
int num=0;
if(cnt==0) return 0;
for(auto x:mul){
cout<<x.second<<' ';
++num;
if(num==cnt) break;
}
return 0;
}
「CF521D」 Shop的更多相关文章
- 「CF521D」Shop
传送门 Luogu 解题思路 当只有第三类操作时,我们显然先进行val较大的操作,这是显然的. 那么就考虑把所有的操作都转变为第三类操作. 第一类操作,显然很容易变为第二类操作:单点维护最大的最终结果 ...
- 【LOJ】#2985. 「WC2019」I 君的商店
LOJ#2985. 「WC2019」I 君的商店 一道很神仙的题啊QAQ 居然是智商题--不是乱搞或者是大数据 我们可以用2N问出一个最大值是1 然后对于任意两个值\(x + y\)和\(a\)比较 ...
- loj2985「WC2019」I 君的商店(二分,思维)
loj2985「WC2019」I 君的商店(二分,思维) loj Luogu 题解时间 真的有点猛的思维题. 首先有一个十分简单的思路: 花费 $ 2N $ 确定一个为 $ 1 $ 的数. 之后每次随 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
随机推荐
- Go基础结构与类型03---标准输入与输出
package main import ( "fmt" "strconv" ) //每次接收一个用户输入 func main031() { //定义a, b两个 ...
- 微信架构 & 支付架构(下)
微信架构 & 支付架构(下) 3. 管理网络请求 首先看看原来 iOS 处理支付网络请求的缺陷: 原来支付的请求,都是通过一个单例网络中心去发起请求,然后收到回包后,通过抛通知,或者调用闭包的 ...
- 五、部署LNMP环境(linux + nginx + mysql + php)
装包(nginx.数据库.php.php调用)---------起服务-----权限 装包: yum -y install gcc openssl-devel pcre-devel zlib-de ...
- 13:Linux虚拟机网络连接异常
这两个服务需要启动
- OpenCV随笔
创建一个窗口#zeros(shape,dtype=float,order='C')#shape:形状,dtype:数据类型,可选参数,默认numpy.float64img = np.zeros((50 ...
- 【题解】Luogu P2327 [SCOI2005]扫雷
Luogu P2327 [SCOI2005]扫雷 Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余" ...
- TKE 体验升级:更快上手 K8s 的24个小技巧
作者 王孝威,腾讯云容器产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务. 背景 "功能"解决是产品有或者没有一个能力的问题,有了" ...
- Linux常见信号介绍
1.信号 首先信号我们要和信号量区分开来,虽然两者都是操作系统进程通信的方式.可以简单的理解,信号是用来通知进程发生了什么需要做什么,信号量一般是用作进程同步(pv操作) 2.常见信号量 (以下数字标 ...
- ASW 工作流最佳实践(二):使用 ASW 并发调用函数
在音视频转码.ETL 作业处理.基因数据处理等诸多场景中,我们都可以通过工作流并行调用云函数,将任务进行并行处理,大大提高任务处理的吞吐量,满足应用场景的高实时性.高并发能力. 在<使用 ASW ...
- VsCode中代码折叠快捷键
ctrl+K ctrl+[ 折叠本级 ctrl+K ctrl+] 取消折叠本级 ctrl+K ctrl+0 折叠全部 ctrl+K ctrl+J 取消折叠全部