嵊州D5T2 折纸 folding

折纸 folding

【问题描述】

在非常紧张的 NOIP 考试中,有人喜欢啃指甲,有人喜欢转铅笔,有人喜欢撕 纸条,……而小 x 喜欢迷折纸。

现有一个 W * H 的矩形纸张,监考老师想知道,小 x 至少要折多少次才能使 矩形纸张变成 w * h 的矩形纸张。

注意,每次的折痕都要平行于纸张的某一条边。

【输入格式】

第一行包括两个整数 W,H。

第二行包括两个整数 w,h。

【输出格式】

输出一个整数,表示至少需要折的次数。若无解,则输出-1。

【输入输出样例】

Input1Input2 Input3

2 7

2 2

5 5

1 6

10 6

4 8

Output1Output2Output3
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 0;if(b>=a/2.0) return 1;return func(a/2.0,b)+1;
}
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 0;} cout<<min(func(W,w)+func(H,h),func(W,h)+func(H,w));return 0;
}
//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 0;if(b>=a/2.0) return 1;return func(a/2.0,b)+1;
}
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 0;} cout<<min(func(W,w)+func(H,h),func(W,h)+func(H,w));return 0;
}
//这里是我开始错了的一种情况
//29808 20197
//1900 28433
//答案:5
//错误答案:4

 

OK! 

转载于:https://www.cnblogs.com/send-off-a-friend/p/11189655.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Portworx和Couchbase的有状态容器

容器本应是短暂的&#xff0c;因此可以很好地扩展以用于无状态应用程序。 有状态的容器&#xff08;例如Couchbase&#xff09;需要区别对待。 管理Docker容器的持久性概述了如何管理有状态容器的持久性。 该博客将说明如何使用Docker Volume Plugins和Portworx创建有状态的容…

java和jvm_java 和 JVM

C和Java的区别指针&#xff1a;java中不存在指针的概念&#xff0c;编程者无法直接通过指针来直接访问内存&#xff0c;有利于维护java程序的安全多重继承&#xff1a;C支持多重继承&#xff0c;java不支持多重继承&#xff0c;但是允许一个类继承多个接口来实现多重继承的问题…

Redis 集群_主从复制_哨兵模型

1 redis集群简介 1.1 集群的概念 所谓的集群&#xff0c;就是通过添加服务器的数量&#xff0c;提供相同的服务&#xff0c;从而让服务器达到一个稳定、高效的状态。 1.1.1 使用redis集群的必要性 问题&#xff1a;我们已经部署好了redis&#xff0c;并且能启动一个redis&#…

java 7 update 17_Java version 7, Update 17 is NOT recongnized by FireFox version 19.0.2

选择的解决方案Reply to my own post:Out of all the solutions posted regarding Java install problems, I gleaned one thing: A re-install of Java and a re-install of Firefox may well solve the problem.Well, for me, thus far, it has.The simple steps I followed:…

英语中的国籍,国家和地区

英语中对于国籍&#xff0c;国家的表述是不一样的&#xff0c;我时常迷糊于此。前些日子我发现了一本英语奇书《Practical English Usage》&#xff0c;这本书回答了我许多英语中的疑问。下面的内容也就是将该书的第364条抄一下。 1&#xff0c;Introduction In order to refer…

junit测试方法_JUnit测试方法订购

junit测试方法直到版本4.10为止的Junit都使用反射API返回的测试类中测试方法的顺序作为测试方法执行的顺序– Class.getMethods&#xff08;&#xff09; 。 引用getMethods&#xff08;&#xff09;api的Javadoc&#xff1a; 返回的数组中的元素未排序&#xff0c;并且没有任…

java非阻塞锁_Java并发问题的非阻塞解决方案

转自http://blog.csdn.net/u011277203/article/details/9223545在并发环境中&#xff0c;对于共享资源通常会采用显式的锁机制(比如synchronized或ReentrantLock)来保证在任意时刻只会有一条线程访问这些变量&#xff0c;并且这些变量的修改对随后获取锁的线程是可见的。无法获…

Java垃圾收集器:G1GC何时将CMS强制退出?

在针对JDK 9&#xff08;2017/4/4&#xff09;提出的JEP中 &#xff0c; Mark Reinhold写道JEP 291 &#xff08;“弃用并发标记扫描&#xff08;CMS&#xff09;垃圾收集器”&#xff09;是“已被放入“建议的在讨论和审查后&#xff0c;由所有者将其定位为目标”。 如果JEP 2…

模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范...

一.模块的简介 什么是模块: 模块就是一系列功能的结合体 模块的三种来源: 1.内置的 2.第三方的  3.自定义的 模块的四种表现形式: 1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)(***)    2.已被编译为共享库或DLL的C或C扩展…

java dll 乱码_java调用c++ dll出现中文乱码 | 学步园

最近的开发用到了使用java调用本机动态连接库的功能&#xff0c;将文件路径通过java调用C代码对文件进行操作。在调用中如果路径中包含有中文字符就会出现问题&#xff0c;程序运行就会中止。下面用一个小例子&#xff0c;来说明记录下解决的方法。java中传入一个字符串&#x…

每日一问:Android 滑动冲突,你们都是怎样处理的

坚持原创日更&#xff0c;短平快的 Android 进阶系列&#xff0c;敬请直接在微信公众号搜索&#xff1a;nanchen&#xff0c;直接关注并设为星标&#xff0c;精彩不容错过。 在 Android 开发中&#xff0c;滑动冲突总是我们一个无法避免的话题。而对于解决方案却是众说纷纭。比…

java多线程 cpu分配_java多线程总结(转载)

Java 多线程编程总结-------------------------------------------------------------------------------------------------下面的内容是很早之前写的&#xff0c;内容不够充实&#xff0c;而且是基于Java1.4的内容&#xff0c;Java5之后&#xff0c;线程并发部分扩展了相当多…

java设计模式迭代器模式_迭代器模式和Java

java设计模式迭代器模式大家好&#xff0c;在本文中&#xff0c;我们将检查Iterator Pattern 。 我知道你们中许多人已经使用过一种设计模式&#xff0c;但是也许您没有意识到它是模式&#xff0c;或者不知道它的巨大价值。 根据《 Head First Design 》一书&#xff1a; 迭代…

笔记_SQLite入门

1、SQLite是什么&#xff1f; QLite没有单独的服务器进程。 它直接读取和写入普通磁盘文件。 具有多个表&#xff0c;索引&#xff0c;触发器和视图的完整SQL数据库包含在单个磁盘文件中。2、SQLite语法 区分大小写&#xff1a; SQLite不区分大小写。但是&#xff0c;有一些区分…

java线程提交_从Java线程到线程池

线程模型线程模型分为两类&#xff0c;用户级线程(ULT)和内核级线程(KLT)用户级线程(ULT)&#xff1a;user level threads&#xff0c;系统内核对ULT无感知&#xff0c;线程的创建和调度都由用户级APP进程管理&#xff1b;即APP自行管理的线程&#xff0c;就是用户级线程内核级…

使用Spring Boot自动发布和监视API

如果您正在沿着微服务风格的架构前进&#xff0c;那么您将需要接受的一个租户就是自动化。 这种架构风格介绍了许多活动部件。 如果成功&#xff0c;您的环境将具有大量服务API&#xff0c;企业可以将其用于应用程序开发和集成。 这意味着必须有一种方法可以发现可用的API文档…

mysql导入导出

导出1.将数据库mydb导出到e:\mysql\mydb.sql文件中&#xff1a;打开开始->运行->输入cmd 进入命令行模式c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql然后输入密码&#xff0c;等待一会导出就成功了&#xff0c;可以到目标文件中检查是否成功。…

mysql 半同步关闭_MySQL的半同步模式配置

1、什么是半同步&#xff1f;在有一台主服务器、多台从服务器的情况下&#xff0c;主服务器只会等待一台从服务器同步数据。2、为什么要使用半同步&#xff1f;在使用同步模式时&#xff0c;数据的写速度太慢。在使用异步模式时&#xff0c;可能会造成从服务器上的现在存储的数…

GIS集成技术之二:数据集成

一。数据驱动。疑惑&#xff1a;ado.net作为一种通用的数据技术&#xff0c;适用与各种格式的文件各种格式的数据库&#xff0c;为一种通用的编程模型。GIS也提出数据集成&#xff1a;毫无疑问&#xff0c;不陷于某击中数据库。因此&#xff0c;我觉得GIS的中心是数据驱动&…

mysql中的replication_mysql中replication的相关问题总结

首先&#xff0c;要使用mysql中的replication&#xff0c;则需要配置master的my.cnf。例如&#xff1a;复制代码 代码示例:server-id 1log_bin mysql-bin#log_bin /var/log/mysql/mysql-bin.logexpire_logs_days 10max_binlog_size 100M#binlog_do_db include_database_na…