字节跳动软件开发笔试

给定四个正整数a, b, l, r,小红希望你在[l, r]区间内寻找一个正整数x,满足x恰好是ab其中一个的倍数(不能同时为ab的倍数)。你能帮帮她吗?

共有q次询问。

输入描述

第一行输入一个正整数q,代表询问次数。

接下来的q行,每行输入四个正整数a, b, l, r,代表一次询问。

1 q 10^5

1 a, b 10^9

1 lr< 10^4

输出描述

输出q行,如果区间内不存在合法的数,请输出-1;否则输出任意一个合法解

示例 1

输入

3

2 3 5 9

5 4 7 10

4 6 9 15

输出

9

8

-1

说明

第一组询问,输出89均可通过本题

第二组询问,输出10也是可以的。

第三组询问,显然无解。

 

#include <iostream>
#include <algorithm>

using namespace std;

// 辗转相除法求最大公约数
long long gcd(long long a, long long b) {
    while (b != 0) {
        long long t = b;
        b = a % b;
        a = t;
    }
    return a;
}

// 计算最小公倍数
long long lcm(long long a, long long b) {
    return a / gcd(a, b) * b; // 防止溢出
}

int main() {
    int q;
    cin >> q;

    while (q--) {
        long long a, b, l, r;
        cin >> a >> b >> l >> r;

        long long lcm_ab = lcm(a, b);
        long long result = -1;

        // 找到大于等于 l 的最小 a 的倍数和 b 的倍数
        long long min_a = ((l + a - 1) / a) * a;
        long long min_b = ((l + b - 1) / b) * b;

        // 从 min_a 和 min_b 开始检查,直到 r
        for (long long x = min(min_a, min_b); x <= r; x++) {
            if ((x % a == 0 || x % b == 0) && x % lcm_ab != 0) {
                result = x;
                break;
            }
        }

        cout << result << endl;
    }

    return 0;
}

 

小红定义一个字符串的权值为:相同连续字符组成的尽可能长的连续段数量。例如,"aabbccc"的权值为 3,因为"aa"+"bb"+"ccc",共有3个连续段。

小红拿到了一个字符串,她有若干次询问,每次询问截取一个连续子串,希望你回答这个连续子串的权值。你能帮帮她吗?

输入描述

第一行输入两个正整数nq,代表字符串长度和询问次数

第二行输入一个长度为n的、仅由小写字母组成的字符串。

接下来的q行,每行输入两个正整数li, ri,代表查询的是第li个字符到第ri个字符组成的

子串。

1 <=n, q<=10^5

1 <= li <= ri <= n

输出描述

输出q行,每行输出一个正整数,代表查询的子串的权值。

示例 1

输入

7 3

aabbccc

1 7

2 4

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要发布2024年(2025届)嵌入式软件开发相关岗位笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论
没有投嵌入式吗?
点赞 回复 分享
发布于 03-15 22:10 四川
哥,投的什么岗位
点赞 回复 分享
发布于 03-15 22:06 四川

相关推荐

数开小菜鸡__求offer版:你是我今早见过的最美的牛客女孩......
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客企业服务