「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;
}

最新文章

  1. 【高级功能】使用canvas元素(第一部分)
  2. AngularJS的小知识点
  3. .NET项目开发的几个非常重要的项目设置
  4. kernel update 2.6.18-2.6.38
  5. Java回调实现
  6. U盘文件后缀变成.exe怎么办?
  7. asp.net生成PDF文件 (1)
  8. windows CE 6.0编译报BLDDEMO: There were errors building MY283错误解决办法
  9. 如何在同一台服务器上安装多套通达OA
  10. 自定义控件 进度条 ProgressBar-2
  11. linux下core文件调试方法(转载)
  12. 在WebStorm中集成Karma+jasmine进行前端单元测试
  13. BeautifulSoup简述
  14. JQuery事件机制笔记
  15. NET Core度身定制的AOP框架
  16. Python Revisited Day 01
  17. react 调用webIm
  18. kali linux安装中文输入法
  19. SQLSERVER 死锁
  20. Ubuntu 16.04安装Eclipse

热门文章

  1. IDEA2021.1 安装教程
  2. Tomcat 中文乱码
  3. 使用 JavaScript 将 HTML 转换为 PDF
  4. Java日期时间API系列38-----一种高效的工作日计算计算方法
  5. BASE理论之思考
  6. 《MySQL面试小抄》查询缓存机制终面
  7. 从性能角度帮你理解HTTP协议
  8. 网络模型mAP计算实现代码
  9. TOF摄像机可以替代Flash激光雷达吗?
  10. JavaFx 创建快捷方式及设置开机启动