题目链接:杭电多校8 - Virtual Judge

题意:一个n*m的长方形,可以沿水平或竖直方向画若干条线,每条线的两端点都在长方形边界上,且线要与长方形的某一边平行且端点位于格点上。要求这些线划分出的每个小长方形面积都大于等于k,求最多可以画几条线。

分析:先来看这么一个问题:一根长为n的绳子,我们要用剪刀将其剪断,要保证每段长度不能小于m,求最多能剪几次?

答案是n/m-1,而不是n/m的下取整,因为我们要保证每一段长度都不能小于m,所以如果剪完最后一次后会使得最后剩余一段长度小于m的绳子,那么这一次我们是不能剪的,所以就需要减1,知道了这个我们再来分析一下这个问题:
我们可以来O(min(k,n))枚举矩形的高h,那么对于每次的高h,为了使得矩形的面积不小于k,那么至少需要的宽度就是w=(k-1)/h+1,那么为了使得切的次数是最大的,那么我们显然宽度越小越好,因为我们切的次数是m/w-1,这显然是一个单调函数,随着w的增大而减小,所以对于每个高已经固定的情况,我们都能O(1)确定切的次数,所以总的复杂度就是O(min(k,n)),对于高为h,宽为b的情况,我们切的次数最多是(n/h+m/b-2),需要注意的是我们的h是小于n的,这个我们可以在for循环的时候就直接设定边界,而b是小于m的,这个需要我们特判一下,细节见代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<vector>
#include<cmath>
using namespace std;
long long n,m,k;
long long cal(long long h)
{long long ans=n/h-1; long long b=(k-1)/h+1;//求解最小的b满足h*b>=k if(b>m) return 0;return (ans+(m/b-1));
}
int main()
{int T;cin>>T;while(T--){scanf("%lld%lld%lld",&n,&m,&k);long long ans=0;for(int i=1;i<=min(k,n);i++)ans=max(ans,cal(i));cout<<ans<<endl;}return 0;
}

2022杭电多校八 1011-Stormwind(贪心)相关推荐

  1. 2022杭电多校赛第八场

    2022杭电多校赛第八场 文章目录 2022杭电多校赛第八场 1004.Quel'Thalas 1001.Theramore 1011.Stormwind 1008.Orgrimmar 1005.Ir ...

  2. 2022杭电多校第八场题解

    2022杭电多校第八场 Theramore(思维) 题意 给定一个01字符串,每次可以将一个奇数长度的区间翻转,求操作后字典序最小的字符串. 分析 翻转奇数长度的区间,元素位置的奇偶性不变,统计奇数位 ...

  3. 2022杭电多校(二)

    2022杭电多校(二) 文章目录 2022杭电多校(二) 一.比赛小结 二.题目分析及解法(基础题) 1001.Static Query on Tree 1002.C++ to Python 1003 ...

  4. 2022杭电多校(四)

    2022杭电多校(四) 文章目录 2022杭电多校(四) 一.比赛小结 二.题目分析及解法(基础题) 1001.Link with Bracket Sequence II 1002.Link with ...

  5. 2022杭电多校(一)

    2022杭电多校(一) 文章目录 2022杭电多校(一) 一.比赛小结 二.题目分析及解法(基础题) 1001.String 1002.Dragon slayer 1003.BackPack 1004 ...

  6. 2022杭电多校(五)

    2022杭电多校(五) 文章目录 2022杭电多校(五) 一.比赛小结 二.题目分析及解法(基础题) 1003.Slipper 1006.BBQ 1007.Count Set 1010.Braggin ...

  7. 2022杭电多校(三)

    2022杭电多校(三) 文章目录 2022杭电多校(三) 一.比赛小结 二.题目分析及解法(基础题) 1001.Equipment Upgrade 1002.Boss Rush 1003.Cyber ...

  8. 2022杭电多校(十)

    2022杭电多校(十) 文章目录 2022杭电多校(十) 一.比赛小结 二.题目分析及解法(基础题) 1001.Winner Prediction 1003.Wavy Tree 1004.Averag ...

  9. 2022杭电多校(九)

    2022杭电多校(九) 文章目录 2022杭电多校(九) 一.比赛小结 二.题目分析及解法(基础题) 1001.Arithmetic Subsequence 1003.Fast Bubble Sort ...

最新文章

  1. Ubuntu下用matplotlib作图时显示中文
  2. mysql 数据表创建字段类型_MySQL 数据类型简介 创建数据表及其字段约束
  3. python中的self描述符__set__和__get__简单总结
  4. 关于优酷开发SDK之setOnSeekCompleteListener
  5. 你对博客中提到的评分规则有何意见和建议?
  6. 论文学习21-Globally Normalized Transition-Based Neural Networks(2016,标签偏差问题
  7. 传统form表单提交方式的文件上传与文件存储
  8. [资料整理]记一下英特尔atom处理器
  9. C语言常用8种排序方法耗时测试
  10. java 怎么启动线程_线程如何正确的启动
  11. ubuntu 環境下 bochs 的安裝
  12. 计算机监控系统sacad,一套幼儿园智能化弱电CAD设计图,可以作为投标技术文件模板...
  13. 代码实现 outerHTML
  14. 怎么把java程序打包?java源代码打包方法
  15. 普通有刷直流电机 H桥驱动
  16. Win10微信打不开小程序,其他程序出现找不到HID.DLL的解决办法
  17. c语言编程多项式,多项式c语言编程.docx
  18. 怎样写好Git的commit信息
  19. ipad显示已停用,连接itunes
  20. win10新建菜单只有文件夹怎么办?

热门文章

  1. Android11 SystemUI启动流程源码分析(一)——SystemUIApplication的创建
  2. Java web框架
  3. 后端返回数据中的换行符,在标签中不显示换行的解决方法
  4. 数据库中的多表联查(四表联查)
  5. 也发个过VS3.0的MapHack
  6. android 服务检测,Android检测某个服务是否还活着代码
  7. 读 活着 【思维导图版】
  8. UML类图java代码实现
  9. 设计模式原则 - 接口隔离原则(二)
  10. 判断一个树是否为二叉查找树