emmm...不能说是水题吧...小金羊以为考的是STL(手动滑稽)...

行,这个题说让分解因数(不一定非得质因数)。

我们考虑到有第k个数有可能有\(x\cdot x=n\)的毒瘤情况,

并且题目明确要求说从小到大

——set帮助你轻松水过去。

emmm....题目范围说是

\[1\leq n\leq 10^{15},1\leq k\leq 10^9
\]

很明显朴素算法炸了!

我们需要知道\(x\cdot y=n\)的时候\(x\leq\sqrt{n}\),两侧同时平方,得到\(x^2\leq n\)。

省下一大笔时间。

去重和排序、排名的工作留给set,我们只需要往里面插入元素就好了。

再说一下setのrank(第k个)的原理:

set自建一颗R-B T(Red-Black Tree),是平衡二叉搜索树,二叉搜索树嘛,rank是其基本算法原理。平衡让其效率更高,让两侧子树尽量平衡元素个数,避免长链的出现。

最后本题解还要说明setiterator(迭代器)的本题用法:

迭代器就是一个集合形式的指针,指向特定容器的某一元素。

但是迭代器不能像指针一样+-×÷,c++ 11的标准好像只支持++或者--。

如果k大于set内部元素个数,就输出-1。如果小于等于,就把iterator移动到

指向k-th个元素上就行。

Code:

#include <iostream>
#include <cstdio>
#include <set>//set库 using namespace std;
typedef unsigned long long int ulli;//毒瘤数据 set<ulli>divisors;
set<ulli>::iterator iter;
void divide(ulli num)
{
for (register ulli i=1;i*i<=num;i++)
{
if (num%i==0)
{
divisors.insert(i);//把x压入set
divisors.insert(num/i);//把另一半也压进去
}
}
} int main()
{
ulli num,k;
cin>>num>>k;
divide(num);
if (k>divisors.size())//范围超出
{
printf("-1");
}
else
{
iter=divisors.begin();//使其指向容器的第一个元素
for (register ulli i=1;i<=k-1;i++,iter++/*仅能使用++*/)
{;}//挪动器(手动滑稽)
cout<<*iter;//注意输出的时候要加上*
}
return 0;
}

实在是看不懂楼上的码风,就发一篇题解方便大家理解。

不会告诉你们一开始输出%d来着

最多一个点177ms,836kB,能接受的范围之内。

题解 CF762A 【k-th divisor】的更多相关文章

  1. 【题解】K乘积

    题目描述 有N个数,每个数的范围是[-50,50],现在你要从这N个数中选出K个,使得这K个数的乘积最大. 输入格式 第一行,N和K. 1 <= N <= 50.  1 <= K & ...

  2. 题解——UVA11997 K Smallest Sums

    题面 背景 输入 输出 翻译(渣自翻) 给定K个包含K个数字的表,要求将其能产生的\( k^{k} \)个值中最小的K个输出出来 题解 k路归并问题的经典问题 可以转化为二路归并问题求解 考虑A[], ...

  3. 题解-Atcoder_agc005D ~K Perm Counting

    Problem AtCoder-agc005D 题意概要:给出\(n,k\),求合法的排列个数,其中合法定义为任何数字所在位置与自身值差的绝对值不为\(k\)(即求排列\(\{A_i\}\),使得\( ...

  4. [LeetCode 题解]: Merge k Sorted Lists

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 题 ...

  5. leecode 题解 || Merge k Sorted Lists 问题

    problem: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its comp ...

  6. [codevs1157]2^k进制数

    [codevs1157]2k进制数 试题描述 设r是个2k 进制数,并满足以下条件: (1)r至少是个2位的2k 进制数. (2)作为2k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ...

  7. 2016ACM-ICPC Qingdao Online青岛网络赛题解

    TonyFang+Sps+我=5/12 滚了个大粗 2016年9月21日16:42:36 10题完工辣 01 题意:求形同的数中大于n的最小值 题解:预处理所有的(5194个),在这里面二分 #inc ...

  8. Codevs1992题解

    题目大意 求有向图中经过某一点k的最大环(数据规模不支持floyd). 题解 以k为起点在正向图中spfa求单源最短路.再在反向图中spfa求单源最短路. 枚举除k外的每个点i.假设有一个同一时候包括 ...

  9. AGC030 简要题解

    A - Poisonous Cookies 题意 有\(A\)个能解毒的普通饼干,\(B\)个能解毒的美味饼干,\(C\)个有毒的美味饼干,求最多能吃多少个美味饼干,每次吃完有毒的饼干后要解毒后才能继 ...

随机推荐

  1. python002

    1.万恶的”+“号字符串拼接 字符串中的连接符+”会开辟一个新的空间,多一个“+“就会多开辟一个空间,影响性能 2.字符串格式化 ”%S“   :字符类型         ”%D“   ”数字类型  ...

  2. 【TestNG测试】TestNG、Maven、testng.xml构建测试工程

    创建一个maven工程 使用Idea创建maven工程 ​ 建立类似如上的工程结构,src/main/java,src/test/java,pom.xml,testng.xml,这里由于我们使用工程是 ...

  3. django orm 操作表

    django orm 操作表 1.基本操作 增 models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs inser ...

  4. React Native移动开发实战-5-Android平台的调试技巧

    Android平台的调试和其他平台的调试也很类似,例如:在Android Studio打开的工程中,打开源码MainActivity.java,然后,将鼠标移至代码编辑区的左侧后,单击鼠标即可添加断点 ...

  5. JDK自带的监控工具方法

    一.概述       SUN 的JDK中的几个工具,非常好用.秉承着有免费,不用商用的原则.以下简单介绍一下这几种工具.(注:本文章下的所有工具都存在JDK5.0以上版本的工具集里(jdk的bin目录 ...

  6. 2018年第九届蓝桥杯【C++省赛B组】

    2标题:明码 汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛.16点阵的字库把每个汉字看成是16x16个像素信息.并把这些信息记录在字节中. 一个字节可以存储8位信息,用32个字节就 ...

  7. First Scrum Meeting (2015/10/18)

    会议是在昨晚进行的,本来早就应该写博了,可惜今天校园网炸个不停= =.刚修好就赶紧来发博客. 会议基本要素 会议主题:爬虫项目的核心技术讨论以及项目初期的工作分配 会议时间:2015.10.18 19 ...

  8. Scrum Meeting 10.23

    Scrum Meeting No.3 今天所完成的任务仍然停留在学习基础知识上.说实话,由于缺少安卓开发.web开发的经验,我们只能一步步摸索着来. 成员 已完成任务 下一阶段任务 徐越 阅读网上的博 ...

  9. EDK_II环境搭建与测试

    一. 环境准备 Windows 10 (64位)专业版 Visual Studio 2010旗舰版(默认路径安装) Mscrosoft SDKs 7.0A BIOS综合包里的EDK开发环境 二. 实验 ...

  10. 2018软工实践—Alpha冲刺(10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试整体软件 展示GitHub当 ...