博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【贪心+二分】codeforces C. Sagheer and Nubian Market
阅读量:4313 次
发布时间:2019-06-06

本文共 1306 字,大约阅读时间需要 4 分钟。

【题意】

如何花最少的钱买最多的纪念品?首要满足纪念品尽可能多,纪念品数量一样花钱要最少,输出纪念品数量以及最少花费。

纪念品的价钱是这么定义的:,其中a是基价,k是总共要买的纪念品数量,x是纪念品的index。

题目给出各个纪念品的基价a(当然,x也随之确定)

【思路】

二分纪念品数量,判断是否满足题意直接贪心,O(n)算出每个纪念品的价钱,O(nlogn)排序,选出最小的mid个;

二分时间复杂度O(n).

所以总的时间复杂度是O(nlogn^2),1000 00刚好满足

【Accepted】

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 using namespace std;17 const int maxn=1e5+5;18 struct souv19 {20 int base;21 int x;22 }a[maxn];23 int n,S;24 typedef long long ll;25 int judge(int mid)26 {27 ll b[maxn];28 for(int i=1;i<=n;i++)29 {30 b[i]=(ll)a[i].base+(ll)a[i].x*(ll)mid;31 }32 sort(b+1,b+n+1);33 ll sum=0; 34 for(int i=1;i<=mid;i++)35 {36 sum+=b[i];37 }38 if(sum<=(ll)S)39 {40 return sum;41 }42 return -1;43 44 }45 int main()46 {47 while(~scanf("%d%d",&n,&S))48 {49 for(int i=1;i<=n;i++)50 {51 scanf("%d",&a[i].base);52 a[i].x=i;53 }54 int l=0;55 int r=n;56 int res=S;57 while(l<=r)58 {59 int mid=(l+r)>>1;60 int ans=judge(mid);61 if(ans!=-1)62 {63 res=ans;64 l=mid+1;65 }66 else67 {68 r=mid-1;69 }70 }71 cout<
<<" "<
<
二分

 

转载于:https://www.cnblogs.com/itcsl/p/6931906.html

你可能感兴趣的文章
应用程序缓存的应用(摘抄)
查看>>
C#析构函数,类运行结束后运行
查看>>
在LAMP的生产环境内添加PHP的cURL扩展模块
查看>>
AMH 软件目录介绍
查看>>
你可能使用了Spring最不推荐的注解方式
查看>>
java常见3种文件上传速度对比和文件上传方法详细代码
查看>>
SVD总结
查看>>
python基础教程(三)
查看>>
PL SQL Developer中文乱码
查看>>
字符串知识大全
查看>>
软件目录结构规范及堂兄弟文件引用
查看>>
H5 WebSocket通信和WCF支持WebSocket通信
查看>>
文件上传
查看>>
不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况...
查看>>
Linux的IO性能监控工具iostat详解
查看>>
老杨聊架构:每个架构师都应该研究下康威定律
查看>>
1022: 锤子剪刀布
查看>>
RESTful-rest_framework认证组件、权限组件、频率组件-第五篇
查看>>
手机自带功能调用
查看>>
百度搜索引擎取真实地址-python代码
查看>>