题目大意:将n个数分解成若干组,如4 = 2+2, 7 = 2+2+3,保证所有组中数字之差<=1。

首先我们能想到找一个最小值x,然后从x+1到1枚举并check,找到了就输出。这是40分做法。

能不能优化?我们发现,若k合法,那么x%k==0或x%(k+1)==0或x%(k-1)==0。

所以枚举倍数就行了,利用贪心找到了就输出。

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
int n;
ll a[],mn=0x3f3f3f3f;
bool cmp(ll x,ll y)
{
return x<y;
}
void check(ll k)
{
if(!k)return ;
ll ret = ;
for(int i=;i<=n;i++)
{
if(a[i]<k-)return ;
int cnt = a[i]/k+(a[i]%k!=);
if(a[i]%k==)
{
ret+=cnt;
continue;
}
if(k*cnt-a[i]>cnt)return ;
ret+=cnt;
}
printf("%I64d\n",ret);
exit();
return ;
}
int main()
{
// freopen("C.in","r",stdin);
// freopen("C.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%I64d",&a[i]);
mn=min(mn,a[i]);
}
for(int i=;i<=mn;i++)
{
check(mn/i+);
check(mn/i);
check(mn/i-);
}
fclose(stdin);
fclose(stdout);
return ;
}

最新文章

  1. 在浏览器的背后(二) —— HTML语言的语法解析
  2. oracle 备份数据库对象(存储过程PROCEDURE,FUNCTION,VIEW,TRIGGER...)
  3. winform中textbox属性Multiline=true时全选
  4. QTableView 添加进度条
  5. [转]AS3的垃圾回收
  6. CentOS系统识别NTFS分区的移动硬盘
  7. http status 汇总
  8. resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现
  9. 使用JMeter的HTTP代理服务器录制app脚本
  10. 《Effective C++》模板与泛型编程:条款32-条款40
  11. Java注解之 @Target、@Retention简介
  12. Python读取文件内容与存储
  13. SpringMVC Controller之间的重定向和转发
  14. Leetcode——66.加一
  15. MyBatis基础入门《二》Select查询
  16. scala VS python2 (linux or shell)
  17. 利用HBuilder打包前端开发webapp为apk
  18. WindowsPhone 8.1 语音命令资料
  19. vim 取消高亮
  20. C/C++中创建(带头结点、不带头结点的)单链表

热门文章

  1. Spring注解详细
  2. bzoj 3555: [Ctsc2014]企鹅QQ【hash+瞎搞】
  3. Unix\Linux | 总结笔记 |文件系统
  4. 《windows核心编程系列》三谈谈内核对象及句柄的本质
  5. C++入门知识点总结
  6. clock()函数的返回值精度问题
  7. VS2010的一个错误,无法加载类型
  8. 441 Arranging Coins 排列硬币
  9. tuple元组创建单元素
  10. JAVA高级特性反射和注解