1 条题解
-
0
题意分析
题目要求将一幅尺寸为 毫米的图像适配到一张尺寸为 毫米的纸张上,并尽可能保持图像的最大化。适配规则如下:
- 旋转允许:图像可以旋转 度(即横向模式),此时尺寸变为 。
- 缩放限制:图像可以缩小,但无需缩小到原始尺寸的 以下。
- 适配目标:图像必须完全适应纸张而不超出边缘,且尽可能保持最大尺寸。
示例解释
以输入样例中的第一个测试用例为例:
- 图像尺寸: 毫米。
- 纸张尺寸: 毫米。
- 旋转图像后尺寸为 毫米。
- 缩小到 后尺寸为 毫米,完全适应纸张。
- 输出为 。
解题思路
关键点分析
-
旋转处理:
- 图像可以以原始方向或旋转 度后的方向进行适配。
- 需要分别计算两种方向下的最大缩放比例。
-
缩放比例计算:
- 对于每种方向,计算图像尺寸与纸张尺寸的宽度和高度的比例。
- 缩放比例取宽度比例和高比例中的较小值,以确保图像完全适应纸张。
- 最终缩放比例取两种方向下的最大值。
-
百分比输出:
- 如果最大缩放比例 (即无需缩小),输出 。
- 否则,输出最大缩放比例对应的整数百分比(向下取整)。
解决步骤
-
输入处理:
- 读取每个测试用例的四个整数 、、、。
- 以四个 结束输入。
-
旋转与缩放计算:
- 计算原始方向下的缩放比例:
- 宽度比例:。
- 高度比例:。
- 缩放比例:。
- 计算旋转方向下的缩放比例:
- 宽度比例:。
- 高度比例:。
- 缩放比例:。
- 取两种方向下的最大缩放比例 。
- 计算原始方向下的缩放比例:
-
百分比输出:
- 如果 ,输出 。
- 否则,输出 。
算法复杂度
- 时间复杂度:,每个测试用例只需常数时间计算。
- 空间复杂度:,仅需常数空间存储中间结果。
示例解析
以输入样例的第一个测试用例为例:
560 400 218 280
- 原始方向:
- 宽度比例:。
- 高度比例:。
- 缩放比例:(即 )。
- 旋转方向:
- 宽度比例:。
- 高度比例:。
- 缩放比例:(即 )。
- 最大缩放比例:,因此输出 。
#include<iostream> using namespace std; int main() { int a,b,c,d; int temp; int e,f; while((cin>>a>>b>>c>>d)&&!(a==0&&b==0&&c==0&&d==0)) { if(a<b) { temp=a; a=b; b=temp; } if(c<d) { temp=c; c=d; d=temp; } e=c*100/a; f=d*100/b; if(e<f) { if(e>100) e=100; cout<<e<<"%"<<endl; } else { if(f>100) f=100; cout<<f<<"%"<<endl; } } //system("pause"); return 0; }
- 1
信息
- ID
- 1707
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 1
- 上传者