题解:【HT-112-Rainbow】核桃彩虹周赛 P12027 宣传
前言
美味题解来啦~~~
响应这里哦~~~
题目(核桃 OJ,可提交!)
温馨提示:要到比赛结束之后(2026.05.24 18:00 之后)才可以查看哦~
以下是作者搬运的题面:
题目描述
小 M 有 n n n 张尺寸完全相同的长方形海报,每张海报的长为 X X X,宽为 Y Y Y。
小 M 有 m m m 块宣传板。第 i i i 块宣传板的可用区域是一个长为 a i a_i ai、宽为 b i b_i bi 的长方形。
现在,小 M 想从这 m m m 块宣传板中选一块来张贴这 n n n 张海报。张贴时,海报不能旋转,且所有海报都必须完整位于宣传板内,任意两张海报不能重叠。
由于小 M 迟迟拿不定主意,他想先知道:对于每一块宣传板,是否都存在一种张贴方案,使得这 n n n 张海报能够全部贴在上面。
输入格式
第一行输入四个整数 n , m , X , Y n,m,X,Y n,m,X,Y,分别表示海报的数量、宣传板的数量、每张海报的长和宽。
接下来 m m m 行,第 i i i 行输入两个整数 a i , b i a_i,b_i ai,bi,表示第 i i i 块宣传板可用区域的长和宽。
输出格式
输出共 m m m 行。对于第 i i i 块宣传板,如果能够张贴下全部 n n n 张海报,输出一行 Yes;否则输出一行 No。
样例
输入 #1
6 4 2 3
4 9
5 8
6 6
3 12
输出 #1
Yes
No
Yes
No
数据规模与约定
对于 20 20 20% 的数据,保证 n , m ⩽ 10 n,m⩽10 n,m⩽10, X , Y , a i , b i ⩽ 10 X,Y,a_i,b_i⩽10 X,Y,ai,bi⩽10;
对于 40 40 40% 的数据,保证 n , m ⩽ 100 n,m⩽100 n,m⩽100, X , Y , a i , b i ⩽ 100 X,Y,a_i,b_i⩽100 X,Y,ai,bi⩽100;
对于 60 60 60% 的数据,保证 n , m ⩽ 10 3 n,m⩽10^3 n,m⩽103, X , Y , a i , b i ⩽ 100 X,Y,a_i,b_i⩽100 X,Y,ai,bi⩽100;
对于 100 100 100% 的数据,保证 1 ⩽ n , m ⩽ 10 5 1⩽n,m⩽10^5 1⩽n,m⩽105, 1 ⩽ X , Y , a i , b i ⩽ 10 9 1⩽X,Y,ai,bi⩽10^9 1⩽X,Y,ai,bi⩽109。
题目分析
请仔细检查在编程中 a ÷ X × b ÷ Y a÷X\times b÷Y a÷X×b÷Y 与 ( a ÷ X ) × ( b ÷ Y ) (a÷X)\times(b÷Y) (a÷X)×(b÷Y) 的区别。
作者被这玩意儿磨了 1 小时。。。
我们经过仔细读题,可以发现以下细节:
- 海报不能旋转(意味着不能竖放)。
- 所有海报都必须完整位于宣传板内(意味着不能裁剪)。
- 任意两张海报不能重叠(意味着题目很严谨 😃)。
- 是每张海报的长为 X X X,宽为 Y Y Y,不是宣传板。
代码历程
我们很容易就写出这个代码:
#include <stdio.h>
long long n, m, x, y, a, b, t;
int main() {
scanf("%lld%lld%lld%lld", &n, &m, &x, &y);
while (m--) scanf("%lld%lld", &a, &b), printf(a / x * b / y >= n ? "Yes\n" : "No\n");
return 0;
}
就是这样,没错。
提交!!!
AC!!!
个 der。“没错”当我没说
竟然是 30 分???WA???
根据数学中 a ÷ X × b ÷ Y = ( a ÷ X ) × ( b ÷ Y ) a÷X\times b÷Y=(a÷X)\times(b÷Y) a÷X×b÷Y=(a÷X)×(b÷Y),所以括号就不用写。
但是,编程 ≠ ≠ = 数学,在编程中,不是除以,是整除。
所以,会有精度问题。
于是我们把括号加上。
#include <stdio.h>
long long n, m, x, y, a, b, t;
int main() {
scanf("%lld%lld%lld%lld", &n, &m, &x, &y);
while (m--) scanf("%lld%lld", &a, &b), printf((a / x) * (b / y) >= n ? "Yes\n" : "No\n");
return 0;
}
AC 了。
就问你猎不猎奇?
就这玩意儿折腾了我 1 小时。。。
避坑!!!
在数学中的 a ÷ X × b ÷ Y a÷X\times b÷Y a÷X×b÷Y 与 ( a ÷ X ) × ( b ÷ Y ) (a÷X)\times(b÷Y) (a÷X)×(b÷Y) 和在编程中的 a ÷ X × b ÷ Y a÷X\times b÷Y a÷X×b÷Y 与 ( a ÷ X ) × ( b ÷ Y ) (a÷X)\times(b÷Y) (a÷X)×(b÷Y) 是有区别的!!!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)