前言

美味题解来啦~~~

响应这里哦~~~

题目(核桃 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,m10 X , Y , a i , b i ⩽ 10 X,Y,a_i,b_i⩽10 X,Y,ai,bi10

对于 40 40 40% 的数据,保证 n , m ⩽ 100 n,m⩽100 n,m100 X , Y , a i , b i ⩽ 100 X,Y,a_i,b_i⩽100 X,Y,ai,bi100

对于 60 60 60% 的数据,保证 n , m ⩽ 10 3 n,m⩽10^3 n,m103 X , Y , a i , b i ⩽ 100 X,Y,a_i,b_i⩽100 X,Y,ai,bi100

对于 100 100 100% 的数据,保证 1 ⩽ n , m ⩽ 10 5 1⩽n,m⩽10^5 1n,m105 1 ⩽ X , Y , a i , b i ⩽ 10 9 1⩽X,Y,ai,bi⩽10^9 1X,Y,ai,bi109

题目分析

请仔细检查在编程中 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) 是有区别的!!!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐