考试时打了个暴力T40,正解是整除分块???完全没听过……而且这题居然还有人A了……

整除分块

暴力就不说了,直接上正解:

将d除过去,右边向下取整(显然不能向上取整啊,会超k的)这个不用处理,整除就是向下取整的,然后就用到整除分块的结论了:

$\frac{N}{i}$向下取整,他是一个递减的分段函数,能不能求他每一段的左右端点呢?这样时间复杂度会降好多的。

对于左端点l,右端点即为$\large \left \lfloor \frac N{\left \lfloor \frac Ni \right \rfloor } \right \rfloor$,证明见上面的博客(其实是我不会……),

回到这个题上,将d除过去,右边向下取整,那么右边的形式就可以用整除分块的结论了,首先第一段的左端点肯定是1,通过式子计算出右端点,考虑式子左边,ai是除l呢,还是除r呢?对于区间[l,r],等式右边是定值,左边单调递减,所以如果r不成立,这一段都不成立,所以除r。

代码实现(超短):

#include<iostream>
#include<cstdio>
#include<cmath>
#define LL long long
using namespace std;
LL n,a[110];
LL k,C;
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i],C+=a[i];
C+=k;
LL d,r;
LL ans=0;
for(LL l=1;;l=r+1)
{
LL tem=0;
if(C/(l)<=0)break;
r=C/(C/l);
for(int i=1;i<=n;i++)
tem+=ceil(1.0*a[i]/r)*r;
if(tem<=C)ans=r;
}
cout<<ans<<endl;
}

HZOJ 砍树的更多相关文章

  1. AC日记——砍树 codevs 1388

    1388 砍树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 伐木工人米尔科需要砍倒M米长的木 ...

  2. codevs 1388 砍树

    时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 伐木工人米尔科需要砍倒M米长的木材.这是一个对米尔科来说很容易的工作,因为他有一 ...

  3. {CSDN}{英雄会}{砍树、石子游戏}

    砍树 思路: 可以将题目意图转化为:给定一棵树,求其中最接近总权值一半的子树. DFS求每个节点的所有子节点的权值和,遍历每个节点,最接近总权值一半的即为答案.复杂度O(N). 石子游戏: 思路: 一 ...

  4. 1369 xth 砍树

    1369 xth 砍树  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 在一个凉爽的夏夜,xth 和 ...

  5. wikioi1369 xth 砍树

    题目描述 Description 在一个凉爽的夏夜,xth 和 rabbit 来到花园里砍树.为啥米要砍树呢?是这样滴, 小菜儿的儿子窄森要出生了.Xth这个做伯伯的自然要做点什么.于是他决定带着 r ...

  6. [Swift]LeetCode675. 为高尔夫比赛砍树 | Cut Off Trees for Golf Event

    You are asked to cut off trees in a forest for a golf event. The forest is represented as a non-nega ...

  7. 牛客挑战赛30 小G砍树 树形dp

    小G砍树 dfs两次, dp出每个点作为最后一个点的方案数. #include<bits/stdc++.h> #define LL long long #define fi first # ...

  8. Leetcode 675.为高尔夫比赛砍树

    为高尔夫比赛砍树 你被请来给一个要举办高尔夫比赛的树林砍树. 树林由一个非负的二维数组表示, 在这个数组中: 0 表示障碍,无法触碰到. 1 表示可以行走的地面. 比1大的数 表示一颗允许走过的树的高 ...

  9. 洛谷—— P1873 砍树

    https://www.luogu.org/problemnew/show/P1873 题目描述 伐木工人米尔科需要砍倒M米长的木材.这是一个对米尔科来说很容易的工作,因为他有一个漂亮的新伐木机,可以 ...

随机推荐

  1. springmvc配置不拦截静态资源

    <mvc:resources mapping="/js/**" location="/js/"/>

  2. centos 安装redis2.8.9

    1没有安装gcc yum install gcc-c++ 2. 安装tcl yum install -y tcl 3.安装redis $ wget http://download.redis.io/r ...

  3. Spring Boot → 09:使用外置Servlet容器_tomcat9.0

    Spring Boot → 09:使用外置Servlet容器_tomcat9.0

  4. tomcat 端口占用问题解决

    在dos下,输入  netstat   -ano|findstr  8080 //说明:查看占用8080端口的进程 显示占用端口的进程 taskkill  /pid  6856  /f //说明,运行 ...

  5. jQuuery Mobile 移动端开发框架

    jQuery Mobile 是创建移动 web 应用程序的框架. jQuery Mobile 适用于所有流行的智能手机和平板电脑. jQuery Mobile 使用 HTML5 和 CSS3 通过尽可 ...

  6. 【机器学习PAI实战】—— 玩转人工智能之你最喜欢哪个男生?

    摘要: 分类问题是生活中最常遇到的问题之一.普通人在做出选择之前,可能会犹豫不决,但对机器而言,则是唯一必选的问题.我们可以通过算法生成模型去帮助我们快速的做出选择,而且保证误差最小.充足的样本,合适 ...

  7. socket in android

    Server  -  JAVA package com.jim.ndkdemo; import android.net.LocalServerSocket; import android.net.Lo ...

  8. PHP核心编程--文件上传(包含多文件上传)

    一.单文件上传 图片上传界面: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  9. Codeforces 404B

    毫无疑问这题不是难题,但是这种题目最让人纠结 打心里对这种题目就比较害怕,果然,各种WE 这里贴上代码,用Python写的,比较偷懒: def cur_pos(a, d): if 0 <= d ...

  10. SPARK Day04

    广播变量和累加器 广播变量 广播变量理解图 广播变量使用 val conf = new SparkConf() conf.setMaster("local").setAppName ...