折纸 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的更多相关文章

  1. 折纸(folding)

    问题 C: 折纸 时间限制: 1 Sec  内存限制: 128 MB[提交] [状态] 题目描述 现有一个W*H的矩形纸张,求至少要折多少次才能使矩形纸张变成w*h的矩形纸张.注意,每次的折痕都要平行 ...

  2. CSS3写折纸

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. 折纸问题java实现

    /** * 折纸问题 这段代码写的太low了 本人水平有限 哎... 全是字符串了 * @param n * @return * @date 2016-10-7 * @author shaobn */ ...

  4. 【BZOJ】1074: [SCOI2007]折纸origami

    http://www.lydsy.com/JudgeOnline/problem.php?id=1074 题意:一开始有一个左上角是(0,100),右下角是(100,0)的纸片,现在可以沿有向直线折n ...

  5. 1074: [SCOI2007]折纸origami - BZOJ

    Description 桌上有一张边界平行于坐标轴的正方形纸片,左下角的坐标为(0,0),右上角的坐标为(100,100).接下来执行n条折纸命令.每条命令用两个不同点P1(x1,y1)和P2(x2, ...

  6. CSS3实现文字折纸效果

    CSS3实现文字折纸效果 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <title></tit ...

  7. 1074: [SCOI2007]折纸origami

    Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 372  Solved: 229[Submit][Status][Discuss] Descriptio ...

  8. UVA 177 PaperFolding 折纸痕 (分形,递归)

    著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条.现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每 ...

  9. ZR#955 折纸

    ZR#955 折纸 解法: 可以发现折纸之后被折到上面的部分实际上是没有用的,因为他和下面对应位置一定是一样的,而影响答案的只有每个位置的颜色和最底层的坐标范围.因此,我们只需要考虑最底层即可,即我们 ...

随机推荐

  1. python笔记带你走向测试开发之路-第一篇(数据类型之数字,序列)

    数字 数字的类型 数字是 Python中比较常用的数据类型,数字有可以分为: 整型 int如 1,2,3 浮点型 float如 2.1,3.5 长整型 long如 3L,需要注意的是 Python2. ...

  2. SpringBoot Jpa 自定义查询

    SpringBoot Jpa 自定义查询 持久层Domain public interface BaomingDao extends JpaRepository<BaomingBean,Inte ...

  3. Ubuntu 18.04下用户的创建、修改权限及删除用户的方法

    1. 创建用户 2. 修改用户权限 3. 删除用户 1. 创建用户useradd命令 //命令一:这种命令会在登录界面显示用户名sudo useradd -m XXX -d /home/XXX -s ...

  4. javascript获取一个字符串的长度(包含中文)

    /* getStrLen(str):获取一个字符串的长度(包含中文) */ function getStrLen(str){ let len = 0, i, c; for (i = 0; i < ...

  5. [RHEL8]关闭SELinux(同CentOS7)

    修改配置文件(永久修改) # vi /etc/selinux/config SELINUX=disabled # 关闭 SELINUX=enforcing # 开启 命令方式(临时修改重启失效) # ...

  6. 关于Java/Kotlin下载图片,图片打开不能显示问题探究

    图片下载其实是个很简单的功能,通过IO流从在线地址获取流,之后将流输出到文件即可完成下载功能,但是,最近我发现某个网站中的图片下载成功,但是打开却是无法打开,这让我迷惑,百度上根本就没有人说清楚 今天 ...

  7. 解决github图片不显示的问题

    修改hosts C:\Windows\System32\drivers\etc\hosts 在文件末尾添加: # GitHub Start 192.30.253.112 Build software ...

  8. computed setter

      computed setter computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter : 实例 4 var vm = new Vue({ el: '#app' ...

  9. Java高级项目实战03:CRM系统数据库设计

    接上一篇:Java高级项目实战02:客户关系管理系统CRM系统模块分析与介绍 欢迎点击回顾,接下来我们说说 CRM系统数据库设计. 我们根据产品的原型搞以及UI组的设计稿, 接下来就要设计数据库, 一 ...

  10. git系列之---工作中项目的常用git操作

    0.本地git的安装 官网下载 1.git 配置 git config user.name  查看 用户名 git config user.email   查看 邮箱 git config --glo ...