题解折纸

Posted kcn999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解折纸相关的知识,希望对你有一定的参考价值。

题目描述

        现有一个W×H的矩形纸张,求至少要折多少次才能使矩形纸张变成w×h的矩形纸张。注意,每次的折痕都要平行于纸张的某一条边。

 

输入输出格式

输入格式

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

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

 

输出格式

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

 

输入输出样例

输入样例一

2 7

2 2

 

输出样例一

2

 

输入样例二

5 5

1 6

 

输出样例二

-1

 

输入样例三

10 6

4 8

 

输出样例三

2

 

说明

数据规模

        对于20%的数据,W=w且H,h≤3;

        对于100%的数据,1≤W,H,w,h≤10^9

 

题解

        题目中的纸张可以反转,也就是说折纸的方案要分两种情况,知道这个细节即可。

技术图片
#include<iostream>
#include<algorithm>

using namespace std;

float W,H,tempW,tempH;
float w,h;
int ans,tempans;

int main()
{
    cin>>W>>H>>w>>h; 
    if(W<H)
    {
        tempW=W;
        tempH=H;
        swap(W,H);
    }
    if(w<h) swap(w,h);
    
    if(W<w||H<h)
    {
        cout<<-1;
        return 0;
    }
    
    while(W>w)
    {
        W/=2;
        ans++;
    }
    while(H>h)
    {
        H/=2;
        ans++;
    }
    
    if(tempW&&tempH)
    {
        while(tempW>w)
        {
            tempW/=2;
            tempans++;
        }
        while(tempH>h)
        {
            tempH/=2;
            tempans++;
        }
        if(tempans<ans) ans=tempans;
    } 
    
    cout<<ans;
    
    return 0;
} 
题解

 

以上是关于题解折纸的主要内容,如果未能解决你的问题,请参考以下文章

树--06---二叉树--03---二叉搜索树(BST)--最大深度问题折纸问题

50种折纸方法

如何在 UITableView 中插入和删除行时模拟折纸

关于折纸的动画

1074: [SCOI2007]折纸origami

例题1折纸痕