提交时间:2022-06-04 13:05:05
运行 ID: 40739
#include <bits/stdc++.h> using namespace std; int w,h,x,y; int f2(int m,int n){//计算一边折成另一边的次数 int as=0;//次数 while(m!=n){ if(n*2>=m){//判断是否下一次可以折成 as++; break; } if(m%2==0){//偶数/2 m/=2; } else{//ceil(奇数/2) m/=2; m++; } as++; } return as; } int f1(int a,int b){//a折成x,b折成y(a>=x,b>=y) int ans=f2(a,x)+f2(b,y); return ans; } int main(){ cin>>w>>h>>x>>y; if((x>w&&x>h)||(y>w&&y>h)){//特判:要折成的长与宽都不能大于原纸长与宽任何一个 cout<<-1;//无解 } else{ cout<<min(f1(w,h),f1(h,w));//两种配对情况取小的 } return 0; }