zoukankan      html  css  js  c++  java
  • 数字的升级准则

    数子的升级准则

    问题描述:

    现有 (n) 个数字,分别是 (1,2,3,...,n),每个数字初始等级都为 (0),对于第 (i) 个数字每过 (i) 个时间就会升一级,例如 (5) 个数字过去 (3) 个时间后它们的等级分别是 (3, 1, 1, 0, 0)
    问题来了,(n) 个数字经过 (n) 个时间后把他们的等级进行降序排序并去重后的得到一个等级表,那么你知道第 (x) 个数字的等级在这张等级表中排第几吗?
    (ps:若 (n=5) 时降序排序为 {(5,2,1,1,1)},则去重后的等级表为{(5,2,1)})

    输入描述

    第一行输入一个正整数 (T(1 leq T leq10^6)),表示测试案例的数目,对于每组案例。
    一行两个正整数(n,x(1 leq x leq nleq 10^9))

    输出描述

    对于每个案例,输出一个正整数表示答案。

    示例

    输入

    2
    25 9
    1000000000 1000000000

    输出

    8
    63244

    思路:当 (i*j leq n) 时,(i)(j) 在等级表中等级必定不一样,同时数字的等级满足数论分块(对称性),所以 (O(1)) 可做。

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int T;
        cin >> T;
        while(T --) {
            int n, x;
            cin >> n >> x;
            int m = sqrt(n);
            if (n >= m*(m+1)) {
                if (x <= m + 1) cout << x << "
    ";
                else cout << 2*m - n/x +1 << "
    ";
            }
            else {
                if (x <= m) cout << x << "
    ";
                else cout << 2*m -n/x << "
    ";
            }
        }
        return 0;
    }
    
    
  • 相关阅读:
    wait 和 notify 方法
    synchronized关键字
    多线程之thread、runnable的区别
    CodeForces 213 E
    hdu 3038 并查集
    zoj 3349 dp + 线段树优化
    hdu 4419 线段树 扫描线 离散化 矩形面积
    hdu 4262(线段树)
    hfut 1287
    hdu 4747 (线段树)
  • 原文地址:https://www.cnblogs.com/yycx/p/14368909.html
Copyright © 2011-2022 走看看