「巧克力」题解
时间:2021-07-13
本文章向大家介绍「巧克力」题解,主要包括「巧克力」题解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
「巧克力」题解
题目
学校的网站,一般人上不去。题目链接:Link。
有一块高 \(H\) 块,宽 \(W\) 块的巧克力, 小明将其分为 \(3\) 块。他只能沿着每块巧克力的边缘切割,并且切割的形状必须是一个长方形。 小明希望尽可能的平均切割,也就是他希望 \(S_{max} – S_{min}\) 尽可能的小, \(S_{max}\) 是最大那一份的面积 (包含的块数), \(S_{min}\) 是最小那一份的面积。 求 \(S_{max} – S_{min}\) 的最小值。
代码
如果光看样例,会简单地以为答案是 \((H \bmod 3) \times (W \bmod 3)\),其实不然。这道题本质上就是一个枚举优化的代码。枚举一刀切的位置(这里可以再优化,只在 \(\frac{1}{3}H \pm 5\) 的位置枚举就可以),再在剩下的区域中尽量平均分——容易证明这样是最优的。
当然了,最开始枚举的那刀可以横切页可以竖切,所以这样完之后 swap(H,W)
一下就可以了。
数据范围到了 \(10^5\)——十年 OI 一场空,不开 long long 见祖宗!代码如下:
#include <bits stdc++.h="">
using namespace std;
#define ll long long
ll x, y, ans;
void mov(ll a, ll b) {ans = min(ans, max(max(a, b), x * y - a - b) - min(min(a, b), x * y - a - b));}
// 算三块中的最大值减去最小值,更新 ans
void movs() {
for (ll i = 1; i < x; i++) {
ll z = x - i; mov(i * y, y / 2 * z); mov(i * y, z / 2 * y);
}
} // 尽量平均分
int main() {
cin >> x >> y; // 输入
ans = x * y; // ans 初始值 xy
movs(); swap(x, y); movs(); // 简单操作,记得 swap
cout << ans << endl; // 输出喽
return 0;
}
\(10\) 个点跑了 \(21\) ms,稍微有点多,不过代码实在很短了。压行代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll x,y,ans;
void mov(ll a,ll b){ans=min(ans,max(max(a,b),x*y-a-b)-min(min(a,b),x*y-a-b));}
void movs(){for(ll i=1;i<x;i++) {ll z=x-i;mov(i*y,y/2*z);mov(i*y,z/2*y);}}
int main(){cin>>x>>y;ans=x*y;movs();swap(x,y);movs();cout<<ans;return 0;}
原文地址:https://www.cnblogs.com/liuzimingc/p/chocolate.html
- Day1下午解题报告
- 【关关的刷题日记54】Leetcode 226. Invert Binary Tree
- Day2上午解题报告
- 【关关的刷题日记55】Leetcode 404. Sum of Left Leaves
- CSS选择器详解
- 前端开发必备之Emmet
- virtualenvwrapper + pyenv 打造多版本 Python 环境
- 【关关的刷题日记56】Leetcode 107 Binary Tree Level Order Traversal II
- 新手Python渗透工具入门
- ReentrantLock 与 AQS 源码分析
- python识别验证码遇到问题解决方法
- Angular开发实践(七): 跨平台操作DOM及渲染器Renderer2
- Leetcode-Easy 121. Best Time to Buy and Sell Stock
- MongoDB初识
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python–shutil移动文件到另一个路径的操作
- PHP正则表达式处理函数(PCRE 函数)实例小结
- yii2的restful api路由实例详解
- PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
- 用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
- Python操作MySQL数据库的示例代码
- 解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
- PyCharm中配置PySide2的图文教程
- 浅析Python 简单工厂模式和工厂方法模式的优缺点
- thinkPHP利用ajax异步上传图片并显示、删除的示例
- 对python中list的五种查找方法说明
- Laravel框架查询构造器简单示例
- PHP调用微博接口实现微博登录的方法示例
- Python使用pyexecjs代码案例解析
- PHP抽象类与接口的区别实例详解