问题描述

苟先生的狼狗大军没有追上富先生, 所以他把它们都解雇了, 决定去雇佣一些更好的狗, 不过狗可是很贵的。苟先生有 \(w\) 元钱, 有 \(n\) 条狗可以雇佣, 第 \(i\) 条狗有一个能力值 \(q_i\)和一个需求 \(s_i\), 也就是说给它的钱不能少于 \(s_i\)。 对于两条狗 \(i\) 和 \(j\),给它们的钱的比值必须等于 \(q_i/q_j\)(当然钱可以不为整数) 。 苟先生希望雇佣到尽量多的狗, 并花尽量少的钱。

输入格式

第一行两个整数 \(n\) 和 \(w\)。
接下来 \(n\) 行每行两个整数 \(s_i\) 和 \(q_i\)。

输出格式

第一行一个整数 \(m\) 表示雇佣的数量, 接下来 \(m\) 行每行一个整数表
示雇佣的编号, 可以任意输出一组合法的解。

数据范围与约定

对于 50%的数据 \(n<=5000\);
对于 100%的数据 \(n<=100000,w<=10^{10},s_i,q_i<=20000\)。


首先吐糟数据,100%的数据只有50分,事实上是5e5

因为判最小钱判错了,而且掉到可持久化坑里,坚定的认为这个题可持久化才能输出方案,所以只有10pts

从一堆奇奇怪怪的东西里找到正解可以说是很不容易了,旁边的ouuanjulao几秒就出正解了

按\(\frac{s_i}{q_i}\)从小到大排序,我们发现如果以最低价选了某个位置\(i\)的东西,那么它左边的选择都可以唯一确定了,总花费是\(s_i \times \frac{\sum_{j=1}^i p_j}{p_i}\)

贪心的选,我们先选\(p\)小的就行了

可以用堆维护统计。。我没想到用的平衡树。。

保证钱最小 不等于 保证\(\sum_{j=1}^i p_j\)最小...


Code:

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <ctime>
#define ls ch[now][0]
#define rs ch[now][1]
using namespace std;
const int N=5e5+10;
int n;
double w;
struct node
{double s,q;int num;bool friend operator <(node n1,node n2){return n1.s/n1.q<n2.s/n2.q;}
}dog[N];
double dat[N],sum[N];
int ch[N][2],siz[N],num[N],val[N],tot,root;
void updata(int now)
{siz[now]=siz[ls]+siz[rs]+1;sum[now]=sum[ls]+sum[rs]+dat[now];
}
void split(int now,double k,int &x,int &y)
{if(!now) {x=y=0;return;}if(k>=dat[now])x=now,split(rs,k,rs,y);elsey=now,split(ls,k,x,ls);updata(now);
}
void split1(int now,double k,int &x,int &y)
{if(!now) {x=y=0;return;}if(k>=sum[ls]+dat[now])x=now,split1(rs,k-sum[ls]-dat[now],rs,y);elsey=now,split1(ls,k,x,ls);updata(now);
}
int Merge(int x,int y)
{if(!x||!y) return x+y;if(val[x]<val[y]){ch[x][1]=Merge(ch[x][1],y);updata(x);return x;}else{ch[y][0]=Merge(x,ch[y][0]);updata(y);return y;}
}
int New(double k,int id)
{num[++tot]=id,sum[tot]=dat[tot]=k,siz[tot]=1,val[tot]=rand();return tot;
}
void Insert(double k,int id)
{int x,y;split(root,k,x,y);root=Merge(x,Merge(New(k,id),y));
}
int cnt,cnt0,ans[N],Ans;double cost;
void dfs(int now)
{ans[++cnt0]=num[now];if(ls) dfs(ls);if(rs) dfs(rs);
}
void query(double q,double s,int id)
{int x,y;double k=w*q/s;split1(root,k,x,y);if(cnt<siz[x]){cost=sum[x]*s/q;cnt=siz[x];Ans=id;//dfs(x);}if(cnt==siz[x]&&sum[x]*s/q<cost){cost=sum[x]*s/q;Ans=id;//dfs(x);}root=Merge(x,y);
}
int main()
{srand(time(0));freopen("gui.in","r",stdin);freopen("gui.out","w",stdout);scanf("%d%lf",&n,&w);cost=w;for(int i=1;i<=n;i++){scanf("%lf%lf",&dog[i].s,&dog[i].q);dog[i].num=i;}sort(dog+1,dog+1+n);for(int i=1;i<=n;i++){Insert(dog[i].q,dog[i].num);query(dog[i].q,dog[i].s,i);}memset(ch,0,sizeof(ch));root=tot=0;for(int i=1;i<=Ans;i++)Insert(dog[i].q,dog[i].num);int x,y;split1(root,w*dog[Ans].q/dog[Ans].s,x,y);dfs(x);printf("%d\n",cnt);sort(ans+1,ans+1+cnt);for(int i=1;i<=cnt;i++)printf("%d\n",ans[i]);return 0;
}

2018.8.21

转载于:https://www.cnblogs.com/butterflydew/p/9512509.html

安徽师大附中%你赛day9 T3 贵 解题报告相关推荐

  1. 无聊的活动/缘生意转(2018 Nova OJ新年欢乐赛B题)解题报告

    题目2(下面的太抓 我重新写了个背景 其他都一样) 无聊的活动 JLZ老师不情愿的参加了古风社一年一度的活动,他实在不觉得一群学生跳舞有什么好看,更不明白坐在身后的学生为什么这么兴奋(看小姐姐),于是 ...

  2. XTU新生赛B题 ABK 解题报告

    题目描述 ABK是一个比A+B还要简单的题目,给出两个整数A,B,求出A和B的第K大公约数. 输入 第一行是一个整数N(N ≤ 10000),表示样例的个数. 以后每行一个样例,为3个整数A,B,K ...

  3. 关于安徽赛区推广校赛的实施办法

    关于安徽赛区 推广校赛的实施办法 全国组委会:   安徽赛区作为第一个省级赛区自2010年举办至今,受到安徽省教育厅和安徽各高校高度认可,是安徽省教育厅重点支持的大学生学科和技能竞赛A类赛事.但安徽赛 ...

  4. 中国最新奥数竞赛成绩出炉:南师大附中女生严彬玮满分夺冠!60人国家集训队名单公布...

    雷刚 发自 副中心  量子位 报道 | 公众号 QbitAI 第35届中国数学奥林匹克竞赛成绩公布. 同时也意味着新一届中国奥数国家集训队,正式集结. 60名中学生. 湖北贡献9人.广东7人,上海6人 ...

  5. 2021年兰州师大附中高考成绩查询,2021年兰州重点高中名单及排名,兰州高中高考成绩排名榜...

    "一千个人眼中,就有一千个哈姆雷特".关于兰州高职学校排名,每个人的观点也是各不相同,今天就给大家分享一下我心中的兰州高中排名及格局分布,主要参考依据是近年中考录取分数线及高考成绩 ...

  6. 2021年兰州师大附中高考成绩查询,西北师范大学附属中学2021年排名

    我们想了解的是这个学校的师资怎样,办学这么久以来有获得了什么样的成绩,获得了什么样的荣誉,这个学校是省级示范高中还是市级示范高中,而这个级别的什么样的排名情况,下面我为大家整理了作为省级示范高中学校的 ...

  7. 南师大附中2021高考成绩查询,2021高考倒计时,你有一份师大附中专属回忆录待查收~...

    原标题:2021高考倒计时,你有一份师大附中专属回忆录待查收~ NO.1442 距离2021年高考不到24小时...... 对于大部分人来说,人生中没有任何一场考试比高考更加惊心动魄. 同样地,也没有 ...

  8. 2021高考甘肃师大附中成绩查询,2021甘肃理科高考成绩排名一分一档表,甘肃高考理科成绩排名查询...

    2015甘肃理科高考成绩排名一分一档表甘肃高考理科成绩排名查询 肃省2017年高考文科状元出炉,来自民乐一中的王复英以总分676分摘取理科第一名桂冠.文科状元惠雅婕来自西北师大附中,总分660分.恭喜 ...

  9. 哈师大大二有计算机课,哈师大附中晨风计算机社团

    晨风计算机社团 社团介绍 附中校园论坛于2001年由学生自主编程创办,是哈市第一个由学生建立的校园论坛.论坛由在校学生独立维护并管理,旨在为大家提供一个畅所欲言.交流心声的平台,成为在校生活中亮丽的一 ...

  10. 2021昆明师大附中高考成绩查询,云南师大附中2021届高三年级第一次市统测优秀学生名单出炉!...

    云南师大附中2021届高三年级第一次市统测优秀学生名单: 文科优秀学生 张若楠.杜雨桐.柳依依.赵楠.汤超然.周苏青.郑雅月.李浈欣.苏倬平.赵媛 理科优秀学生 周逸航.浦同铭.吴庭逸.邓捷予.陶星宇 ...

最新文章

  1. 小米android10怎么样,感觉小米10太贵不完美?这些Android旗舰也许就有你的菜!
  2. 基于知识图谱、认知推理、逻辑表达的认知图谱,则被越来越多的国内外学者和产业领袖认为是 “目前可以突破这一技术瓶颈的可行解决方案之一
  3. SQL 注入详解扫盲
  4. 了解哪些c++11特性?
  5. java导入excel 实例_Java数据导入功能之读取Excel文件实例
  6. 10个值得关注的优秀CSS框架
  7. DB2连接不上mysql数据库_一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
  8. C#与matlab混合编程
  9. 剑指offer (03):数组中重复的数字 (C++ Python 实现)
  10. DataGrid中DropDownList触发SelectedIndexChanged事件并修改DataGrid行值(转载)
  11. CVPR 2021 TrafficQA
  12. 一个简短的指南的iOS越狱及原因
  13. python小波去噪的方法_小波去噪基本概念
  14. 冒泡排序及一个小小的优化
  15. overleaf表格_latex插入表格心得
  16. 安卓ASO怎么做?有哪些工具平台?安卓aso工具有哪些
  17. 关于投票活动主办方对于微信上投票怎样刷票及微信投票怎样查刷票
  18. CF 1300.B——Assigning to Classes【思维】
  19. 800道Java后端经典面试题,希望你找到自己理想的Offer呀~
  20. Pois-son blending

热门文章

  1. 了解Java对象(抽象和具体)
  2. 论职能线和产品线的部门划分
  3. 漫画 |《帝都程序猿十二时辰》
  4. 基于腾讯云函数SCFddddocr免费验证码识别API响应系统
  5. 逆向基础-Windows驱动开发【SSDT HOOK】
  6. apache rewrite规则全攻略
  7. 2 CRYPTO Bubble_Babble气泡密码
  8. Apache安全漏洞
  9. android wifi智能硬件4g,智能硬件 篇五:把WiFi带在身上,告别宽带!华为随行WiFi2畅享版真实体验...
  10. 异地多活与CAP原理