题解 | 小红的区间构造

小红的区间构造

https://www.nowcoder.com/practice/df1bbce22cad4d2a8b69b7db3715e651

遍历左边界l即可,从1~n*x直接for循环遍历会超时,这里用二分法对l进行遍历,且不用再对[l, r]内的值进行for循环遍历一遍了,直接用r/x - (l-1)/x即可得到[l, r]内x的倍数个数,除法都是向下取整

#include <iostream>
using namespace std;

int main() {
    int n, k, x;
    cin >> n >> k >> x;

    // 剪枝:如果 k-1 < (n-1)*x,必不可能有 n 个 x 的倍数
    if (k - 1 < (n - 1) * x) {
        cout << -1 << endl;
        return 0;
    }

    // 二分查找 l 的范围
    int left = 1;
    int right = x * n;  // l 的最大可能值
    int result_l = -1, result_r = -1;

    while (left <= right) {
        int mid = left + (right - left) / 2;
        int r = mid + k - 1;
        int count = r / x - (mid - 1) / x;

        if (count == n) {
            result_l = mid;
            result_r = r;
            break;
        } else if (count < n) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }

    if (result_l != -1) {
        cout << result_l << " " << result_r << endl;
    } else {
        cout << -1 << endl;
    }

    return 0;
}

全部评论

相关推荐

每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
我看到好多人都在说0offer好焦虑,结果一看是投了百度快手字节啥的。好像大家都是只想通过校招进大厂,对小公司是不考虑的吗😂可是能进大厂的难道不是只有少部分人吗,真心发问
梦想是成为七海千秋:沉默的大多数吧,喜欢晒的都是能引起共鸣的大厂,找小厂的人,别人也不认识你这个小厂,就自己偷偷找了实际上大多数人哪有什么机会能找到大厂
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务