【CF830C】Bamboo Partition 分块
【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 分块的更多相关文章
- Codeforces 830C Bamboo Partition (看题解)
Bamboo Partition 列公式, 整除分块, 想不到, 好菜啊. #include<bits/stdc++.h> #define LL long long #define fi ...
- Codeforces 830C Bamboo Partition 其他
原文链接https://www.cnblogs.com/zhouzhendong/p/CF830C.html 题解 把问题转化成求最大的 $d$ ,满足$$\sum_{1\leq i \leq n}( ...
- Codeforces VK Cup Finals #424 Div.1 C. Bamboo Partition(数论)
题目要求符合以下条件的最大的d 化简得 注意到 最多只有2*sqrt(a[i]-1)种取值,也就是一共最多有n*sqrt(10^19)种取值,于是枚举一下d,计算出符合上上式的最大的d更新答案,然后d ...
- cf 424
Office Keys 首先显然有随人位置的递增,钥匙的位置也要递增,这样考虑两张做法: 1.$f(i,j)$ 表示前i个人,钥匙到第j个最少用的最大时间,然后$O(nK)$ dp 2.二分时间,对于 ...
- spark学习记录-2
spark编程模型 ====== spark如何工作的? 1.user应用产生RDD,操作变形,运行action操作 2.操作的结果在有向无环图DAG中 3.DAG被编译到stages阶段中 4.每一 ...
- Spark中的partition和block的关系
hdfs中的block是分布式存储的最小单元,类似于盛放文件的盒子,一个文件可能要占多个盒子,但一个盒子里的内容只可能来自同一份文件.假设block设置为128M,你的文件是250M,那么这份文件占3 ...
- Spring Batch 远程分区和远程分块的区别
Partitioning is a master/slave step configuration that allows for partitions of data to be processed ...
- MapReduce实例2(自定义compare、partition)& shuffle机制
MapReduce实例2(自定义compare.partition)& shuffle机制 实例:统计流量 有一份流量数据,结构是:时间戳.手机号.....上行流量.下行流量,需求是统计每个用 ...
- PHP搭建大文件切割分块上传功能
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
随机推荐
- Needle in a haystack: efficient storage of billions of photos 【转】
转自09年的blog,因为facebook在国内无法访问,故此摘录. The Photos application is one of Facebook’s most popular features ...
- bzoj 5092: [Lydsy1711月赛]分割序列
5092: [Lydsy1711月赛]分割序列 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 219 Solved: 100[Submit][Stat ...
- SELinux下更改mysql端口
默认情况下 mysql更改端口后是不能通过selinux的 提示启动错误,那么首先就要看mysql的错误日志 可是我不知道mysql错误日志的位置 首先,更改selinux的模式为passive 然后 ...
- 瞬发大量并发连接 造成MySQL连接不响应的分析
http://www.actionsky.com/docs/archives/252 2016年12月7日 黄炎 目录 1 现象 2 猜想 3 检查环境 4 猜想2 5 分析 5.1 TCP握手的 ...
- lock与monitor的区别
1.Lock 只能对引用对象加锁 Lock锁定区间内可以对锁定值修改而不发生运行时错误,通常也会采用此种修改方式.这种方式又有点类同于使用Monitor.Wait取得资源,并对这个资源进行操作. 用法 ...
- apache mina框架
http://blog.csdn.net/ljx8928358/article/details/7759024
- Android Spinner In Toolbar
As the title of the post suggest in this tutorial we will see how to have spinner widget inside the ...
- devicemapper: Error running deviceCreate (ActivateDevice) dm_task_run failed
在一台新机子上面,docker处理完lvs数据卷之后,启动docker服务时,出现了启动失败,失败信息如下: [root@hxin221 ~]# systemctl status docker ● d ...
- python的安全插件
1.PyFuzz (0.1.3) - Simple fuzz testing for u ...
- TortoiseGit在github上创建工程
一.前期准备 TortoiseGit官网下载地址:http://code.google.com/p/tortoisegit/ git下载地址:https://git-scm.com/download/ ...