(题面保密,内部人员可览)

  首先观察题面,可得出如下公式

      ∑(ceil(a[i] /d)*d−a[i])≤k

  其中,ceil(a[i] /d)表示在需要被砍伐之前所经过的轮数,ceil函数是为了保证一定可以被砍伐,即轮数=(a[i]%d)?(a[i]/d):(a[i]/d+1)

   轮数*d表示一共生长的长度,减去a[i]即为需要砍伐的长度,取sigma即为一共需砍伐的长度,与长度上限k比较,若小于等于k,即为符合条件。

  推得公式后,大部分OIER的思路都是二分求解,但这个题不满足二分单调性,可以手动模拟一下,有如下几种方法:

    1.暴力对拍

    2.将check函数返回值输出,理想状态:“1 1 1 1 1 1 1 1 0 0 0 0 0 0”,实际状态:“1 0 1 1 0 1 0 0 1 1 0”(疯狂跳跃)。。

    3.将二分左端点值赋作以求得的ans值,右端点不变,再次二分,发现ans值发生变化

  于是对于此题而言,我们应该用什么方法求解呢?

  首先我们化简公式

      ∑(ceil(a[i] /d))≤(k+∑(a[i]))/d

  我们不难发现 k+∑(a[i]) 是一个定值,我们设之为limit

  考虑函数单调性思想,我们发现右侧(k+∑(a[i]))/d的值应向下取整,因为若一个函数的最大值小于另一个函数的最小值,那么这个函数小于另一个函数恒成立,由此可得解

  那么总结规律,随着d的不断增加(k+∑(a[i]))/d的值呈分段下降,而∑(ceil(a[i] /d))也同样分段下降,且区间长度远小于前者

  于是不难看出,可以采用数论分块向下取整的思想来处理。

  例如:floor(107/36)=2,floor(107/53)=2,36~53即为一段区间,那么如何求呢?公式如下

    r=k/(k/l);

  证明如下:

    

  而这也正是此题的核心内容

  由于题目要求求最大的值,那么我们只需要满足每一个区间的右端点满足条件即可,因为∑(ceil(a[i] /d))满足区间单调性,若一个区间,左端点满足条件,那么整个区间一定满足条件,若右端点不满足条件,那整体一定不满足,而一个区间的最优解,一定是右端点,因此不需考虑中间交点。

  代码如下:

  

#include<bits/stdc++.h>
#define re register
#define ll long long
using namespace std;
ll n,k,limit,a[];
inline ll read(){
re ll a=,b=;re char ch=getchar();
while(ch<''||ch>'')
b=(ch=='-')?-:,ch=getchar();
while(ch>=''&&ch<='')
a=(a<<)+(a<<)+(ch^),ch=getchar();
return a*b;
}
signed main()
{
n=read(),k=read();limit=k;
for(re ll i=;i<=n;++i)
a[i]=read(),limit+=a[i];
for(re ll d=limit;d>=;d--)
{
re ll flag=limit/d,tot=;
for(re ll i=;i<=n;++i)
tot+=(a[i]-)/d+;
if(tot<=flag)
{printf("%lld\n",d);return ;}
d=(limit/(limit/d+))+;
}
return ;
}

7. 18 test 砍树题解的更多相关文章

  1. [7.18NOIP模拟测试5]砍树 题解(数论分块)

    题面(加密) 又考没学的姿势……不带这么玩的…… 考场上打了个模拟 骗到30分滚粗了 稍加思考(滑稽)可将题面转化为: 求一个最大的$d$,使得 $\sum \limits _{i=1}^n {(\l ...

  2. 7.18 NOIP模拟测试5 星际旅行+砍树+超级树

    T1 星际旅行 题意:n个点,m条边,无重边,有自环,要求经过m-2条边两次,2条边一次,问共有多少种本质不同的方案.本质不同:当且仅当至少存在一条边经过次数不同. 题解:考试的时候理解错题,以为他是 ...

  3. AC日记——砍树 codevs 1388

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

  4. 1369 xth 砍树

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

  5. [CSP-S模拟测试]:砍树(数学+模拟)

    题目传送门(内部题1) 输入格式 第一行两个整数$n$,$k$,代表树苗的数量和最大看书的总长度.第二行n个整数$a_i$,代表林先森希望每棵树苗的最终高度. 输出格式 一行一个整数,代表最大可能的d ...

  6. noip模拟8[星际旅行·砍树·超级树·求和]

    也不能算考得好,虽然这次A了一道题,但主要是那道题太简单了,没啥成就感,而且有好多人都A掉了 除了那一道,其他的加起来一共拿了25pts,这我能咋办,无奈的去改题 整场考试的状态并不是很好啊,不知道是 ...

  7. NOIP模拟测试5「星际旅行·砍树·超级树」

    星际旅行 0分 瞬间爆炸. 考试的时候觉得这个题怎么这么难, 打个dp,可以被儿子贡献,可以被父亲贡献,还有自环,叶子节点连边可以贡献,非叶子也可以贡献,自环可以跑一回,自环可以跑两回, 关键是同一子 ...

  8. codevs 1388 砍树

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

  9. Vijos1448校门外的树 题解

    Vijos1448校门外的树 题解 描述: 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现 ...

随机推荐

  1. MyEclispe点击add deploment 无反应的处理,无法添加项目到Tomcat

    比如你的工作空间为 E:\workspace-project 找到以下路径: E:\workspace-project\.metadata\.plugins\org.eclipse.core.runt ...

  2. Ubuntu下U盘能看见盘符但打不开

    查看U盘状态 sudo fdisk -l 格式化 sudo mkfs -t vfat -I /dev/sdb1 sudo mkfs -t ntfs -I /dev/sdb1 sudo mkfs -t ...

  3. Chapter 3 树与二叉树

    Chapter 3 树与二叉树 1-   二叉树 主要性质: 1   叶子结点数 = 度为2的结点数 + 1   2   二叉树第i层上最多有 (i≥1)个结点 3   深度为k的二叉树最多有 个结点 ...

  4. ES6之主要知识点(五)函数

    函数参数的默认值 作用域 ; function f(x, y = x) { console.log(y); } f() let x = ; function f(y = x) { let x = ; ...

  5. C++面向对象高级编程(上)-Geekband

    头文件和类声明 一定要注意使用防卫式的头文件声明: #ifndef _CLASSHEAD_ #define _CLASSHEAD_ . . . . #endif 基于对象和面向对象 : 基于对象 单一 ...

  6. string字符串 获取指定位置范围的子字符串

    string   str1="12345678";   str1.Substring(0,4);其中0表示要取得字符串的起始位置,4就是要取得字符串的长度  结果是 "1 ...

  7. PostgreSQL的架构

    是最先进的数据库.他的第一个版本在1989年发布,从那时开始,他得到了很多扩展.根据db-enginers上的排名情况,PostgreSQL目前在数据库领域排名第四. 本篇博客,我们来讨论一下Post ...

  8. Redis开发及管理实战

    目录 Redis数据类型 字符串 String string类型操作 字典 Hash 列表 List 集合 Set 有序集合 SortedSet 生产消费模型 Redis事务管理 事务命令 示例 Re ...

  9. Django项目:CRM(客户关系管理系统)--75--65PerfectCRM实现CRM课程分数排名

    # classtop_urls.py # ————————64PerfectCRM实现CRM课程排名详情———————— from django.conf.urls import url from b ...

  10. 3926: [Zjoi2015]诸神眷顾的幻想乡

    传送门 一个广义后缀自动机模板. //Achen #include<algorithm> #include<iostream> #include<cstring> ...