题目 2701: 蓝桥杯2022年第十三届决赛真题-取模(C/C++/Java组)

题目 2701: 蓝桥杯2022年第十三届决赛真题-取模(C/C++/Java组)

时间限制: 3s 内存限制: 512MB 提交: 6633 解决: 1263

题目描述

给定 n, m ,问是否存在两个不同的数 x, y 使得 1 ≤ x < y ≤ m 且 n mod x = n mod y 。

输入格式

输入包含多组独立的询问。

第一行包含一个整数 T 表示询问的组数。

接下来 T 行每行包含两个整数 n, m,用一个空格分隔,表示一组询问。

输出格式

输出 T 行,每行依次对应一组询问的结果。如果存在,输出单词 Yes;如果不存在,输出单词 No。

样例输入复制

3

1 2

5 2

999 99

样例输出复制

No

No

Yes

提示

对于 20% 的评测用例,T ≤ 100 ,n, m ≤ 1000;

对于 50% 的评测用例,T ≤ 10000 ,n, m ≤ 105;

对于所有评测用例,1 ≤ T ≤ 105 ,1 ≤ n ≤ 109 ,2 ≤ m ≤ 109。

1.分析

1.对于偶数,m>=2就行,x为1,y为2。

2.对于奇数,循环找到x,y。记录余数的个数,为2的话就break。

3.用scanf可以过,cin不能过。

2.代码

cpp 复制代码
#include<iostream>
#include<map>
using namespace std;
typedef long long LL;
const int MAX = 1e5 + 10;
int n, m,T;
bool check(int x) {
    map<int, int> s;
    for (int i = 1; i <= m; i++) {
        s[n % i]++;                  //记录余数个数
        if (s[n % i] >= 2) {        //直接结束
            return true;
        }
    }
    return false;
}
int main() {
    scanf("%d", &T);
    while (T--) {
        scanf("%d%d", &n, &m);
        if (n % 2 == 0) {
            if (m >= 2) printf("Yes\n");
            else printf("No\n");
        }
        else {
            if (m>=23||check(n)) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}
相关推荐
白白白小纯1 小时前
算法篇—链表的中间节点
c语言·数据结构·算法·leetcode
程序喵大人1 小时前
【C++进阶】STL容器与迭代器 - 04 list 和 forward_list 用节点换稳定位置
开发语言·c++·list
麻瓜老宋1 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十步,魔法数修复、测试分隔符、位运算截断检查、进制溢出检查
c语言·开发语言·atomcode
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-11 分段计算居民水费(C语言实现)
c语言·开发语言·算法
lingran__2 小时前
C++_stack和queue和priority_queue(容器适配器)
开发语言·c++
小保CPP3 小时前
OpenCV C++基于极值区域滤波算法的场景文本检测(OCR)
c++·人工智能·opencv·算法·计算机视觉·ocr
星恒随风3 小时前
C++ 多态底层原理:静态绑定、动态绑定、虚函数表与工程实践
开发语言·c++·笔记·学习
wuyk5553 小时前
68.嵌入式 C 语言避坑指南:volatile 关键字 —— 单片机中断、寄存器访问的核心技巧
c语言·开发语言·stm32·单片机·嵌入式硬件
qz_Serene3 小时前
C语言:编译和链接
c语言·开发语言
白色冰激凌3 小时前
[SECS/GEM研究] (四)HSMS 用TCP取代串口
网络·c++·网络协议·secs/gem