题解:P14039 [PAIO 2025] Cake
joshua0729 · · 题解
题解:P14039 [PAIO 2025] Cake
思路:
- 切割规则:每次切割时,从当前矩形中切出的最大正方形的边长等于当前矩形的较短边。例如,对于一个尺寸为
a \times b (其中a \geq b )的矩形,最大正方形的边长为b ,可以切出a // b 个这样的正方形(其实有点类似于辗转相除法)。 - 按照上述过程切出正方形后,剩余的矩形尺寸为
b \times (a \% b) 。 - 重复上述过程,直到剩余矩形的一边为0(即完全切割完了)。每次切割出的正方形数量累加即为总块数。
切割实现方法为循环切割:在每次循环中,计算当前可切割的正方形数量(即
代码
#include<bits/stdc++.h>
using namespace std;
int count_square_cakes(int n,int m){
int a=max(n,m);
int b=min(n,m);
int cnt=0;
while(b!=0){
cnt+=a/b;
int tp=a%b;
a=b;
b=tp;
}
return cnt;
}
时间复杂度: