数学 砍树
来源:互联网 发布:金汇宝软件 编辑:程序博客网 时间:2024/05/20 07:36
Σ (向上取整(a[i]/d)*d-a[i])<=k
Σ(向上取整(a[i]/d))<=k+Σa[i](总称为C)
Σ向上取整(a[i]/d)<=向下取整(C/d);
f(d)=Σ向上取整(a[i]/d),g(d)=向下取整(C/d)
易知两个函数都是单调不上升的。具体来说都是分段的,那么对于g(d)的同一段上,段尾的d值一定优于段首值(f(d)也单调下降)。
那么枚举每一个段尾的d值,暴力求f(d),更新答案即可。
PS:设段首为i,段尾=C/(C/i);神奇。。
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define ll long longusing namespace std;int n;ll k,a[105],ans;inline int read(){ int sum=0,f=1;char x=getchar(); while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();} while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();} return sum*f;}int main(){ n=read();scanf("%lld",&k); for(int i=1;i<=n;i++)scanf("%lld",&a[i]),k+=a[i]; ll i=1,j,t; while(1) { t=k/i;if(t==0)break; j=k/t;ll sum=0; for(int l=1;l<=n;l++) { ll h=a[l]/j; if(h*j<a[l])h++; sum+=h;if(sum>t)break; } if(sum<=t)ans=j; i=j+1; } cout<<ans;}
阅读全文
0 0
- 数学 砍树
- 砍树
- 砍树
- 砍树哲理
- 砍树问题
- 砍树问题
- xth 砍树
- Tyvj 1324 夏夜砍树
- 我们为何砍树???
- wikioi1369 xth 砍树
- codevs1369 xth砍树
- 砍树 (Standard IO)
- (2441): xth 砍树
- [Noip模拟题]砍树
- 树状数组的简单应用(夏夜砍树)
- zoj 3211 砍树 有顺序的dp
- 砍树_纪中3079_dfs
- 0915 星际旅行 砍树 超级树
- 笔记练手
- Android ADB 端口占用问题解决方案
- INDEX
- jQuery设置下拉框select 默认选中option
- jq 今天学到的新技术
- 数学 砍树
- shader总结二
- 日志文件系统的设计与实现
- php项目实战
- qt获取combox内容的知识点
- 用有名管道实现文件复制,有两个终端 ,一个进行复制操作,另一个进行粘贴操作
- 17.9.15leetcode刷题(595)
- css中大div中的块级元素转为内联块产生的问题
- 数据结构——线性表——散列存储结构——哈希表知识点总结 原创 2017年05月14日 10:08:40 散列(hashing)是一种重要的存储方法,也是一种常见的查找方法。 基本思想:以结点的