Gadgets for dollars and pounds CodeForces - 609D
Nura wants to buy k gadgets. She has only sburles for that. She can buy each gadget for dollars or for pounds. So each gadget is selling only for some type of currency. The type of currency and the cost in that currency are not changing.
Nura can buy gadgets for n days. For each day you know the exchange rates of dollar and pound, so you know the cost of conversion burles to dollars or to pounds.
Each day (from 1 to n) Nura can buy some gadgets by current exchange rate. Each day she can buy any gadgets she wants, but each gadget can be bought no more than once during n days.
Help Nura to find the minimum day index when she will have k gadgets. Nura always pays with burles, which are converted according to the exchange rate of the purchase day. Nura can't buy dollars or pounds, she always stores only burles. Gadgets are numbered with integers from 1 to m in order of their appearing in input.
Input
First line contains four integers n, m, k, s (1 ≤ n ≤ 2·105, 1 ≤ k ≤ m ≤ 2·105, 1 ≤ s ≤ 109) — number of days, total number and required number of gadgets, number of burles Nura has.
Second line contains n integers ai (1 ≤ ai ≤ 106) — the cost of one dollar in burles on i-th day.
Third line contains n integers bi (1 ≤ bi ≤ 106) — the cost of one pound in burles on i-th day.
Each of the next m lines contains two integersti, ci (1 ≤ ti ≤ 2, 1 ≤ ci ≤ 106) — type of the gadget and it's cost. For the gadgets of the first type cost is specified in dollars. For the gadgets of the second type cost is specified in pounds.
Output
If Nura can't buy k gadgets print the only line with the number -1.
Otherwise the first line should contain integer d— the minimum day index, when Nura will have kgadgets. On each of the next k lines print two integers qi, di — the number of gadget and the day gadget should be bought. All values qi should be different, but the values di can coincide (so Nura can buy several gadgets at one day). The days are numbered from 1 to n.
In case there are multiple possible solutions, print any of them.
Example
5 4 2 2
1 2 3 2 1
3 2 1 2 3
1 1
2 1
1 2
2 2
3
1 1
2 3
4 3 2 200
69 70 71 72
104 105 106 107
1 1
2 2
1 2
-1
4 3 1 1000000000
900000 910000 940000 990000
990000 999000 999900 999990
1 87654
2 76543
1 65432
-1
有m种商品,可以购买,每种商品只能用美元或英镑二者其一购买
你现在有s元,既不是美元,也不是英镑,需要兑换才能购买
你需要买k种商品
你可以在n天里进行购买,每天的汇率不同,汇率告诉你
问你花费最少多少天,可以完成购买任务。
由于本人太菜这题是我写过的最难的二分 (靠题解才能存活的菜鸡)
(这题没有long long WA到吐)
对天数进行二分,am[maxn]这个对应着在1~maxn中兑换英镑的最小值ida[maxn],最小值对应的天数
am[maxn]这个对应着在1~maxn中兑换美元的最小值idb[maxn] 最小值对应的天数 求出每件物品的最小花费排序选出前k个就行了 这题需要理清思路 仔细思考
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
#define maxn 200010
int a[maxn],b[maxn],c[maxn],t[maxn];
int am[maxn],bm[maxn],ida[maxn],idb[maxn],id[maxn];
int n,m,k,s;
struct node
{
long long cost;
int idx;
}qu[maxn];
int cmp(node a,node b)
{
return a.cost<b.cost;
}
long long check(int x)
{
long long ans=;
for (int i= ;i<=m ;i++ ){
if (t[i]==) qu[i].cost=(long long)c[i]*(long long)am[x];
else qu[i].cost=(long long)c[i]*(long long)bm[x];
qu[i].idx=i;
}
sort(qu+,qu++m,cmp);
for (int i= ;i<=k ;i++)
ans+=qu[i].cost;
return ans;
}
int main() {
while(scanf("%d%d%d%d",&n,&m,&k,&s)!=EOF){
am[]=bm[]=;
for (int i= ;i<=n ;i++){
scanf("%d",&a[i]);
if (a[i]<am[i-]) {
am[i]=a[i];
ida[i]=i;
}else {
am[i]=am[i-];
ida[i]=ida[i-];
}
}
for (int i= ; i<=n ; i++) {
scanf("%d",&b[i]);
if (b[i]<bm[i-]) {
bm[i]=b[i];
idb[i]=i;
} else {
bm[i]=bm[i-];
idb[i]=idb[i-];
}
}
for (int i= ;i<=m ;i++)
scanf("%d%d",&t[i],&c[i]);
long long r=n,l=,mid,d=-;
while(l<=r) {
mid=(l+r)/;
if (check(mid)<=s) {
r=mid-;
d=mid;
for (int i= ;i<=k ;i++){
id[i]=qu[i].idx;
}
}else l=mid+;
}
printf("%lld\n",d);
if(d==-) continue;
int x=d;
for (int i= ;i<=k ;i++){
printf("%d %d\n",id[i],t[id[i]]==?ida[x]:idb[x]);
}
}
return ;
}
Gadgets for dollars and pounds CodeForces - 609D的更多相关文章
- codeforces 609D D. Gadgets for dollars and pounds(二分+贪心)
题目链接: D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 mega ...
- Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分,贪心
D. Gadgets for dollars and pounds 题目连接: http://www.codeforces.com/contest/609/problem/C Description ...
- CF# Educational Codeforces Round 3 D. Gadgets for dollars and pounds
D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 megabytes ...
- Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分+前缀
D. Gadgets for dollars and pounds time limit per test 2 seconds memory limit per test 256 megabytes ...
- CodeForces 609D Gadgets for dollars and pounds
二分天数+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...
- CodeForce---Educational Codeforces Round 3 D. Gadgets for dollars and pounds 正题
对于这题笔者无解,只有手抄一份正解过来了: 基本思想就是 : 二分答案,对于第x天,计算它最少的花费f(x),<=s就是可行的,这是一个单调的函数,所以可以二分. 对于f(x)的计算,我用了nl ...
- Codeforces 609D 被二分教做人
传送门:http://codeforces.com/problemset/problem/609/D (如需转载,请注明出处,谢谢O(∩_∩)O) 题意: Nura想买k个小玩意,她手上有 s 个bu ...
- Educational Codeforces Round 3
A. USB Flash Drives 水题,排序即可 ]; int main() { int n,m; scanf("%d%d",&n,&m); ;i<n; ...
- 【249】◀▶IEW-Unit14
Unit 14 Money and Finance 线图写作技巧 1.Model1对应图片分析 The graph contains information about the price in US ...
随机推荐
- FTP工具
上传本地资源到FTP服务器,可以使用LeapFTP软件.左侧为本地资源,右侧为FTP资源.输入用户名,密码,连接后直接拖动即可. 为本地资源建立FTP,可以方便进行设备升级.文件传输等.
- bzoj 4873: [Shoi2017]寿司餐厅 [最小割]
4873: [Shoi2017]寿司餐厅 题意:略 唯一会做的... 一眼最小割 就是最大权闭合子图呀 \(s\rightarrow d_{positive} \rightarrow -d_{negt ...
- Vue的生命周期
1.1.实例生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如需要设置数据监听.编译模板.挂载实例到 DOM.在数据变化时更新 DOM 等.同时在这个过程中也会运行一些叫做生命周 ...
- 游戏服务器设计之NPC系统
游戏服务器设计之NPC系统 简介 NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验.NPC在游戏中有如下作用: 引导玩家体验游戏内容,一般游戏内有很多主线.支线任务,而任务的介绍. ...
- QT使用painter绘制文字时的居中显示
在窗体上绘制文字时,在paintEvent()方法里用QPainter进行绘制. 主要获取对字符串打印在屏幕上时占用的像素大小 QPainter p(this); QFont font("宋 ...
- IOS设备设计完整指南
作为初学者,常常不知如何下手设计,IOS应用UI设计中碰到的种种基础小问题,在此都将一一得到解答.这份完整的设计指南将带你快速上手,为IOS设计出优雅的应用吧. 关于此设计指南 此设计指南描述的是如何 ...
- datatables行编辑中,某个字段用户显示和用于行编辑名称不同时的处理。
比如tag这个字段,对应服务端bean的tag,但是在页面显示时需要为String类型的tagName,那么在行编辑时可以用以下的方式处理.
- 分享一个集成在项目中的REST APIs文档框架swagger
1 为什么是使用swagger? 1-1 当后台开发人员开发好接口,是不是还要重新书写一份接口文档提给前端人员,当然对于程序员最不喜欢的就是书写文档(当然文档是必须的,有利于项目的维护) 1-2 当后 ...
- JDBC数据库操作
JDBC: 创建SQL语句对象 Statement statement = (Statement) con.createStatement() ; 调用执行 statement. ...
- #pragma预处理命令
#pragma comment(lib,"XXX.lib") 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样. #pragma comment(linke ...