zoukankan      html  css  js  c++  java
  • 2021.9.3 阿里笔试AK贴

    题目

      给定三个正整数a, b, c 请找到满足下面条件的x,y的组数

      1, a <= x^2 <=b  

           2, a <= y^3 <= b

          3, |x^2 - y^3| <= c

    其中

    1 <= a <= b <= 1e18

    0 <= c <= 1e18

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    LL maxnum = 1e18;
    LL a, b, c;
    LL get_2(LL x) {
        LL l = 1, r = 1e9;
        while(l<r) {
            LL mid = (l+r) / 2;
            if(mid * mid < x)
                l = mid + 1;
            else r = mid;
        }
        return l;
    }
    
    LL get_3(LL x) {
        LL l = 1, r = 1e6;
        while(l<r) {
            LL mid = (l+r) / 2;
            if(mid * mid * mid < x)
                l = mid + 1;
            else r = mid;
        }
        return l;
    }
    
    int main()
    {
        cin >> a >> b >> c;
        LL x1 = get_2(a);
        LL x2 = get_2(b);
        if(x2 * x2 > b) x2 --;
    
        LL y1 = get_3(a);
        LL y2 = get_3(b);
        if(y2 * y2 * y2 > b) y2 --;
    
        // printf("x: %lld %lld
    ", x1, x2);
        // printf("y: %lld %lld
    ", y1, y2);
    
        LL ans = 0;
        for(LL y = y1; y<=y2; y++) {
            LL k1 = max(y * y * y - c, 0LL);
            LL k2 = y * y * y + c;
            if(y * y * y >= maxnum - c)  k2 = maxnum;
    
            LL t1 = get_2(k1);
            LL t2 = get_2(k2);
            if(t2 * t2 > k2) t2--;
    
            // printf("t: %lld %lld
    ", t1, t2);
            if(t2<x1 || t1>x2) continue;
            else {
                t1 = max(t1, x1);
                t2 = min(t2, x2);
                ans += (t2 - t1 + 1);
            }
        }
        cout << ans << endl;
        return 0;
    }
    抓住青春的尾巴。。。
  • 相关阅读:
    iOS 中架构模式的浅显理解
    Block 在 ARC 下的拷贝
    Repo 的使用小结
    博客园新语言代码高亮以及OpenLiveWriter插件开发(一)
    GridLayout 使用
    PopupWindow 使用
    NDK笔记(二)-在Android Studio中使用ndk-build
    NDK 笔记(一)
    Java 多线程编程
    搭建Apache Web服务器
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/15224816.html
Copyright © 2011-2022 走看看