zoukankan      html  css  js  c++  java
  • 牛客网国庆集训派对Day5 题目 2018年

    链接:https://www.nowcoder.com/acm/contest/205/L
    来源:牛客网
    参考博客:https://blog.csdn.net/HTallperson/article/details/82943889

    数论之神
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描述

    终于活成了自己讨厌的样子。

    这是她们都还没长大的时候发生的故事。那个时候,栗子米也不需要为了所谓的爱情苦恼。
    她们可以在夏日的午后,花大把的时间去研究生活中一些琐碎而有趣的事情,比如数论。
    有一天西柚柚问了栗子米一个题,她想知道中有多少不同的数,这些不同的数字里面第k大的是多少。

    输入描述:

    第一行一个整数T(T≤ 10
    5
    ),表示数据组数。
    每组数据第一行两个整数,表示n,k(1≤ n≤ 10
    18
    ),保证k不会超过不同的数字个数。

    输出描述:

    对于每组数据输出,输出两个整数,表示有多少个不同的数字和这里面第k大的是多少。
    示例1

    输入

    复制
    3
    1 1
    5 2
    67 8

    输出

    复制
    1 1
    3 2
    15 8
    思路:整除分块,O(根号n)。找到出现连续相同的n/i的分界点(就是根号n处)。
    代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int inf=0x3f3f3f3f;
     4 const long long mod=2147493647;
     5 typedef long long ll;
     6 
     7 int main()
     8 {
     9     int t;
    10     scanf("%d",&t);
    11     while(t--)
    12     {
    13         ll n,k;
    14         scanf("%lld %lld",&n,&k);
    15         ll s=sqrt(n);
    16        ll ans1,ans2;
    17         if(s*(s+1)<=n)
    18         {
    19              ans1=2*s;
    20         }
    21         else
    22         {
    23              ans1=2*s-1;
    24         }
    25         if(k==1)
    26         {
    27             ans2=n;
    28         }
    29         else if(k<=s)
    30         {
    31             ans2=n/k;
    32         }
    33         else ans2=ans1-k+1;
    34         printf("%lld %lld
    ",ans1,ans2);
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    python dict
    用Python requests beautifulSoup 获取并显示中文信息
    Python information to learn
    Python 中的异常
    Python 中的函数
    安装Linux系统Fedora 23
    (转)开源协议的比较
    WizNote for linux installation
    linux下编译bib、tex生成pdf文件
    NLP学术组织、会与论文
  • 原文地址:https://www.cnblogs.com/weixq351/p/9745202.html
Copyright © 2011-2022 走看看