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;
    }
    
    
  • 相关阅读:
    机会的三种境界
    常用“快”捷键
    心路历程
    中兴笔试及答案
    浅谈oracle中row_number() over()分析函数用法
    IE的F12开发人员工具不显示问题
    1002.A + B Problem II --大数问题
    6470.count --快速矩阵幂
    4151.电影--贪心
    3070.斐波拉契数列--快速幂
  • 原文地址:https://www.cnblogs.com/yycx/p/14368909.html
Copyright © 2011-2022 走看看