题解:洛谷 AT_abc463_a 16:9
【题目来源】
洛谷:AT_abc463_a [ABC463A] 16:9 - 洛谷
【题目描述】
There is an image with a width of \(X\) pixels and a height of \(Y\) pixels. Determine whether the ratio of the width to the height is \(16\) to \(9\), that is, whether \(X:Y=16:9\).
有一张宽度为 \(X\) 像素、高度为 \(Y\) 像素的图片。请判断其宽高比是否为 \(16:9\),即是否满足 \(X:Y = 16:9\)。
【输入】
The input is given from Standard Input in the following format:
\(X\) \(Y\)
【输出】
If the ratio of the width to the height is \(16\) to \(9\), output Yes; otherwise, output No.
【输入样例】
800 450
【输出样例】
Yes
【核心思想】
-
问题分析:给定图片宽度 \(X\) 和高度 \(Y\),需要判断宽高比是否为 \(16:9\)。即是否存在正整数 \(k\),使得 \(X = 16k\) 且 \(Y = 9k\)。等价于判断 \(\frac{X}{\gcd(X,Y)} = 16\) 且 \(\frac{Y}{\gcd(X,Y)} = 9\)。
-
算法选择:
- 欧几里得算法(辗转相除法):计算 \(X\) 和 \(Y\) 的最大公约数 \(g = \gcd(X,Y)\)
- 比例化简判定:将 \(X\) 和 \(Y\) 同时除以 \(g\) 得到最简比,检查是否等于 \(16:9\)
-
关键步骤:
- 读取输入:\(X\)(宽度)、\(Y\)(高度)
- 计算 \(\gcd\):\(t = \gcd(X, Y)\)
- 判定比例:
- 若 \(16 \times t = X\) 且 \(9 \times t = Y\),输出
Yes - 否则输出
No
- 若 \(16 \times t = X\) 且 \(9 \times t = Y\),输出
- 等价于检查 \(\frac{X}{t} = 16\) 且 \(\frac{Y}{t} = 9\)
-
时间/空间复杂度:
- 时间复杂度:\(O(\log \min(X, Y))\),辗转相除法的复杂度
- 空间复杂度:\(O(1)\),仅使用常数个变量
-
欧几里得算法判定比例的核心思想:
- 最简比唯一性:任意两个正整数的比可以唯一表示为最简分数形式,通过 \(\gcd\) 约分后得到。若最简比等于 \(16:9\),则原比必为 \(16:9\) 的某个整数倍
- 避免浮点误差:不直接计算 \(\frac{X}{Y}\) 并与 \(\frac{16}{9}\) 比较(可能产生浮点精度问题),而是利用整数运算和 \(\gcd\) 进行精确判定
- 等价变形技巧:\(X:Y = 16:9 \Leftrightarrow 9X = 16Y\),也可通过交叉相乘判定,但 \(\gcd\) 方法同时适用于更复杂的比例验证场景
- 辗转相除的高效性:欧几里得算法通过取模运算快速缩小问题规模,时间复杂度为对数级别,远优于枚举
- 适用于比例判定、分数化简、有理数比较等基础数论问题
【算法标签】
入门 #欧几里得算法
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int x, y; // x: 图片宽度, y: 图片高度
// 辗转相除法求最大公约数(GCD)
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
cin >> x >> y; // 读入图片的宽度和高度
int t = gcd(x, y); // 计算 x 和 y 的最大公约数
// 判断化简后的比例是否为 16:9
// 若 x:y = 16:9,则 x = 16*k, y = 9*k(k 为某个正整数)
// 即 x/gcd(x,y) = 16 且 y/gcd(x,y) = 9
// 等价于 16*t == x 且 9*t == y(其中 t = gcd(x,y))
if (16 * t == x && 9 * t == y)
cout << "Yes" << endl; // 宽高比为 16:9
else
cout << "No" << endl; // 宽高比不为 16:9
return 0;
}
【运行结果】
800 450
Yes
浙公网安备 33010602011771号