博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ice Cream Tower Gym - 101194D
阅读量:5108 次
发布时间:2019-06-13

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

Input file: Standard Input

Output file: Standard Ouptut

Time limit: 6 seconds

接着整理奥,2016 ACM-ICPC Asia China-Final的D题。

题目大意:输入n和k,给出n个ice cream balls的大小,k个balls可以组成一个Tower,且里面每下面一层ball的大小>=2*上面一层ball的大小,

求最多能组成几个Towers。

一开始想的只有贪心:从最大的ball开始找,找到一个就加上,尽量剩下小的,可以更好组成Towers。

结果还需要二分,而且一开始的想法也不太对(至于为什么我也不太清楚..菜鸡哭了),是先贪小的,在1到n里随机取1个数,作为求解的结果num,将所有小的作为num个Tower的顶层,然后

往下加层数,直到k层。然后不断二分查找到最大的num值就可以了。

代码如下:

1 #include 
2 #include
3 #include
4 using namespace std; 5 int T,n,k,cas=1; 6 long long a[300005],ceng[300005];//二分+贪心 7 bool isvalid(int b) 8 { 9 int i=0;10 for(i=0; i
=n)19 return false;20 }21 ceng[p]=a[i];22 i++;23 }24 return true;25 }26 int main()27 {28 cin>>T;29 while(T--)30 {31 memset(a,0,sizeof(a));32 memset(ceng,0,sizeof(ceng));33 cin>>n>>k;34 for(int i=0; i
>a[i];36 if(k==1)37 {38 cout<<"Case #"<
<<": "<
<
1)//二分查找44 {45 int mid=(star+endd)/2;46 if(isvalid(mid))47 star=mid;48 else49 endd=mid;50 }51 cout<<"Case #"<
<<": "<
<

 

转载于:https://www.cnblogs.com/shangqing/p/11255582.html

你可能感兴趣的文章
Aop切面开发
查看>>
开始Dev之路
查看>>
信管网2012下半年(11月)信息系统项目管理师论文预测与押题
查看>>
solr异常解决
查看>>
配置 web 内容的访问
查看>>
SDL相关资料
查看>>
web前端开发浏览器兼容性 - 持续更新
查看>>
混合框架
查看>>
Spring-----定时任务Quartz配置
查看>>
WebForm(二)——控件和数据库连接方式
查看>>
genymotion从本地拖拽apk到模拟器失败,报错“An error occured while deploying the file……”-解决方案...
查看>>
(网卡)混杂模式
查看>>
c++刷题(12/100)无序数组中和为定值的最长子数组
查看>>
Hibernate之二级缓存
查看>>
web前端开发人员和设计师必读文章推荐
查看>>
61. Search for a Range【medium】
查看>>
GNU LD脚本解析
查看>>
crontab 在指定时间范围每隔2小时执行一次和指定时间执行实例
查看>>
习题二2
查看>>
python 优雅的使用正则表达式 ~ 1
查看>>