嵊州D5T2 折纸 folding
折纸 folding
【问题描述】
在非常紧张的 NOIP 考试中,有人喜欢啃指甲,有人喜欢转铅笔,有人喜欢撕 纸条,……而小 x 喜欢迷折纸。
现有一个 W * H 的矩形纸张,监考老师想知道,小 x 至少要折多少次才能使 矩形纸张变成 w * h 的矩形纸张。
注意,每次的折痕都要平行于纸张的某一条边。
【输入格式】
第一行包括两个整数 W,H。
第二行包括两个整数 w,h。
【输出格式】
输出一个整数,表示至少需要折的次数。若无解,则输出-1。
【输入输出样例】
| Input1 | Input2 | Input3 |
|
2 7 2 2 |
5 5 1 6 |
10 6 4 8 |
| Output1 | Output2 | Output3 |
| 2 | -1 | 2 |
【数据说明】
对于 20% 的数据满足:W = w 且 H,h≤3。
对于 100% 的数据满足: 1 ≤ W,H,w,h ≤ 9 10 。
Solve
先从错误中得出正确结论
#include<bits/stdc++.h>
using namespace std;
int W,H,w,h;
int func(double a,int b){
if(b>=a) return ;
if(b>=a/2.0) return ;
return func(a/2.0,b)+;
}
int main(){
// freopen("folding.in","r",stdin);
// freopen("folding.out","w",stdout);
cin>>W>>H>>w>>h;
//特判
//如果一个目标宽度比最大的还大,那就不可能
if(max(W,H)<max(w,h)) {cout<<"-1"; return ;}
cout<<min(func(W,w)+func(H,h),func(W,h)+func(H,w));
return ;
}
//29808 20197
//1900 28433
思想
首先,想想有没有不可能折成的情况
如果一个目标宽度比最大的还大,那就不可能折成。输出"-1"。
接着,把四个输入数按Ww,Hh或者是Wh,Hw这样对应,
目的是模拟两种折叠方式,即是把W折成w,H折成h还是把W折成h,H折成w。
最后两种方式中取最小值即可。
cout<<min(func(W,w)+func(H,h),func(W,h)+func(H,w));
再来看函数
一个边界条件
if(b>=a) return 0;
如果当前的目标宽度(b)大于或等于当前宽度(a)//好像应该是等于吧?不会大于了
就不用再折了。返回0;
应该问题就在这里吧?
我们只考虑要排除了“一个目标宽度比最大的还大”这种情况
要让特判更全面
不妨让判断全在里面
再用返回值inf来判断可不可以折成。
My Std
#include<bits/stdc++.h>
using namespace std;
int W,H,w,h;
int func(double a,int b){
if(b>a) return 0x3f3f3f;//这里把开始的一种情况拎出来了
if(b==a) return ;
if(b>=a/2.0) return ;
return func(a/2.0,b)+;
}
int main(){
// freopen("folding.in","r",stdin);
// freopen("folding.out","w",stdout);
cin>>W>>H>>w>>h;
if(max(W,H)<max(w,h)) {cout<<"-1"; return ;}
cout<<min(func(W,w)+func(H,h),func(W,h)+func(H,w));
return ;
}
//这里是我开始错了的一种情况
//29808 20197
//1900 28433
//答案:5
//错误答案:4
OK!
嵊州D5T2 折纸 folding的更多相关文章
- 折纸(folding)
问题 C: 折纸 时间限制: 1 Sec 内存限制: 128 MB[提交] [状态] 题目描述 现有一个W*H的矩形纸张,求至少要折多少次才能使矩形纸张变成w*h的矩形纸张.注意,每次的折痕都要平行 ...
- CSS3写折纸
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- 折纸问题java实现
/** * 折纸问题 这段代码写的太low了 本人水平有限 哎... 全是字符串了 * @param n * @return * @date 2016-10-7 * @author shaobn */ ...
- 【BZOJ】1074: [SCOI2007]折纸origami
http://www.lydsy.com/JudgeOnline/problem.php?id=1074 题意:一开始有一个左上角是(0,100),右下角是(100,0)的纸片,现在可以沿有向直线折n ...
- 1074: [SCOI2007]折纸origami - BZOJ
Description 桌上有一张边界平行于坐标轴的正方形纸片,左下角的坐标为(0,0),右上角的坐标为(100,100).接下来执行n条折纸命令.每条命令用两个不同点P1(x1,y1)和P2(x2, ...
- CSS3实现文字折纸效果
CSS3实现文字折纸效果 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <title></tit ...
- 1074: [SCOI2007]折纸origami
Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 372 Solved: 229[Submit][Status][Discuss] Descriptio ...
- UVA 177 PaperFolding 折纸痕 (分形,递归)
著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条.现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每 ...
- ZR#955 折纸
ZR#955 折纸 解法: 可以发现折纸之后被折到上面的部分实际上是没有用的,因为他和下面对应位置一定是一样的,而影响答案的只有每个位置的颜色和最底层的坐标范围.因此,我们只需要考虑最底层即可,即我们 ...
随机推荐
- Go语言实现:【剑指offer】和为S的两个数字
该题目来源于牛客网<剑指offer>专题. 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 对应每个测试案 ...
- 安装symfony3.4的坑,也是PHP7.3的经典坑之解决办法
对于刚入手symfony3.4的同学,肯定会发现,安装symfony后部署后看到的往往不是hello world,也不是symfony的欢迎页面,而是给你一个下马威,唉,给你来个bug开开胃. 当然这 ...
- Apache开启GZIP 压缩网页
首先我们先了解Apache Gzip的相关资料. 一.gzip介绍 Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压缩到一个纯文本文件时,效果是非常明显的 ...
- mongodb搭建带auth的主从
1:下载mongodb包(mongodb3.4的方法一样,就是mongodb内用户设置到时候不同用户对应不同库,验证时得先创建某个库到用户参考http://ibruce.info/2015/03/03 ...
- 用命令提示符运行简单的Java程序报错
首先用记事本写一个最简单的Java代码,我把文件保存在桌面的HelloWorld文件夹中,这里将记事本的名称改为HelloWorld.java public class HelloWorld{ pub ...
- 将jsp页面转化为图片或pdf升级版(二)(qq:1324981084)
java高级架构师全套vip教学视频,需要的加我qq1324981084 上面我们已经将jsp页面转化成html页面了,那么接下来我们的目标是利用这个html页面形成pdf或图片格式.这里我用到的是w ...
- Blazor client-side Preview 预览版 如何调试 Debug
首先我们使用最简单的模板案例,里面有一个Counter计数器,你可以在创建模板中找到. 首先需要设置运行调试方式为IIS Express.这意味着,MAC可能不能使用调试. 然后开启运行而不调试(Ct ...
- Centos 7 使用(Service iptables stop/start)关闭/打开防火墙 Failed to stop iptables.service: Unit iptables.service not loaded.
背景: 测试部署NetCore 项目到linux 系统时,窗口显示项目部署成功:但是本机无法访问(linux 在虚拟机上[ centos 7.6] ); 如下图↓ 能够相互ping 通,(Xshe ...
- android sdk manager 无法更新,解决连不上dl.google.com的问题
感谢博主的帮助,入口在这:https://www.jianshu.com/p/8fb367a51b9f?utm_campaign=haruki&utm_content=note&utm ...
- 非常简洁简单的tcp socket库 XKSocket
一个非常简洁简单的异步tcp socket库,主要就是分包的问题,处理组包,粘包等问题 非常适合新手:) 项目中带有使用示例. http://git.oschina.net/dreamzgj/XKSo ...