【CF830C】Bamboo Partition

题解:给你n个数a1,a2...an和k,求最大的d使得$\sum\limits_{i=1}^n((d-a[i] \% d) \% d) \le k$

n<=100,a[i]<=10^9,k<=10^11

题解:$\sum\limits_{i=1}^n((d-a[i] \% d) \% d)=d\sum\limits_{i=1}^n{\lceil {a[i]\over d}\rceil }-\sum\limits_{i=1}^na[i]$

显然,${\lceil {a[i]\over d}\rceil}$最多只有n*sqrt(maxd)种取值,那么分块处理即可。但是你会发现,$last=\lceil{a \over {\lceil {a\over i} \rceil}}\rceil$得到的是最小的last使得$\lceil{a\over i}\rceil=\lceil{a\over last} \rceil$,所以倒着做即可。

PS:前几天考试中出了这道题,全场感人的无人AC,有人说这是CFdiv2的F题,感觉莫名其妙~

如果你熟悉如何用正着分块来处理底的和式,那么想到用倒着分块来处理顶的和式也是自然的~

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
int n;
ll m,ans,a[110],k;
ll Div(ll x,ll y)
{
return (x+y-1)/y;
}
int main()
{
ll i,last,sum,cnt;
int j;
scanf("%d%I64d",&n,&k);
for(j=1;j<=n;j++) scanf("%I64d",&a[j]),m=max(m,a[j]+k);
for(i=m;i;i=last-1)
{
for(last=1,j=1;j<=n;j++) last=max(last,Div(a[j],Div(a[j],i)));
for(sum=cnt=0,j=1;j<=n;j++) sum+=(last-a[j]%last)%last,cnt+=Div(a[j],last);
if(sum<=k)
{
printf("%I64d\n",last+(k-sum)/cnt);
return 0;
}
}
return 0;
}

【CF830C】Bamboo Partition 分块的更多相关文章

  1. Codeforces 830C Bamboo Partition (看题解)

    Bamboo Partition 列公式, 整除分块, 想不到, 好菜啊. #include<bits/stdc++.h> #define LL long long #define fi ...

  2. Codeforces 830C Bamboo Partition 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF830C.html 题解 把问题转化成求最大的 $d$ ,满足$$\sum_{1\leq i \leq n}( ...

  3. Codeforces VK Cup Finals #424 Div.1 C. Bamboo Partition(数论)

    题目要求符合以下条件的最大的d 化简得 注意到 最多只有2*sqrt(a[i]-1)种取值,也就是一共最多有n*sqrt(10^19)种取值,于是枚举一下d,计算出符合上上式的最大的d更新答案,然后d ...

  4. cf 424

    Office Keys 首先显然有随人位置的递增,钥匙的位置也要递增,这样考虑两张做法: 1.$f(i,j)$ 表示前i个人,钥匙到第j个最少用的最大时间,然后$O(nK)$ dp 2.二分时间,对于 ...

  5. spark学习记录-2

    spark编程模型 ====== spark如何工作的? 1.user应用产生RDD,操作变形,运行action操作 2.操作的结果在有向无环图DAG中 3.DAG被编译到stages阶段中 4.每一 ...

  6. Spark中的partition和block的关系

    hdfs中的block是分布式存储的最小单元,类似于盛放文件的盒子,一个文件可能要占多个盒子,但一个盒子里的内容只可能来自同一份文件.假设block设置为128M,你的文件是250M,那么这份文件占3 ...

  7. Spring Batch 远程分区和远程分块的区别

    Partitioning is a master/slave step configuration that allows for partitions of data to be processed ...

  8. MapReduce实例2(自定义compare、partition)& shuffle机制

    MapReduce实例2(自定义compare.partition)& shuffle机制 实例:统计流量 有一份流量数据,结构是:时间戳.手机号.....上行流量.下行流量,需求是统计每个用 ...

  9. PHP搭建大文件切割分块上传功能

    背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...

随机推荐

  1. List集合使用注意的问题

    在做自动保存草稿的功能遇到集合数据的问题,先贴自动保存草稿的代码 /** * 每5 秒保存一次草稿 */private void startDraftTimerTask(){ if (draftTim ...

  2. Codeforces 815 C Karen and Supermarket

    On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a ...

  3. Understanding Objective-C Blocks

    The aim of this tutorial is to give a gentle introduction to Objective-C blocks while paying special ...

  4. EasyMvc入门教程-基本控件说明(2)定时器

    我们有时候希望系统能自动刷新后台数据或者做某个动作,那么定时器的作用就体现出来了. EasyMvc默认提供的服务器可以定时调前端方法与定时调后端方法,先看例子: 定时调客户端事件 实现代码: @Htm ...

  5. python发送邮件(转)

    SMTP发送邮件 阅读: 90274 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和ema ...

  6. SVN merge 三种方式

    1.Merge a range of revisions 2.Reintegrate a branch 3.Merge two different trees ———————————————————— ...

  7. linux中read用法

    read在while中的经常用法: root@ubuntu:/var/lib/logrotate :: # cat /etc/cron.daily/logrotate #!/bin/sh # Clea ...

  8. 收藏以下linux查看系统信息的命令

    # uname -a               # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue   # 查看操作系统版本# hostname              ...

  9. php hex2bin 物联网设备发送十六进制数据

    hex2bin("十六进制字符") 折腾了三天 后来大神一句话搞定 : hex2bin("十六进制字符") 网上有个方向是错误的 就是 "\xAA\x ...

  10. 负载均衡情况下获取真实ip的方法

    公司用了硬件负载均衡,最近发现日志中的用户ip都为负载均衡器的ip,业务需要所以要改为用户真实ip,下面记录一下! 1.打开文件:/etc/httpd/conf/httd.conf. 2.在文件中查找 ...