题目链接

\(Description\)

交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\)。你需要求出所有元素中第\(k\)小的数。你可以调用至多\(100\)次询问某个数组中的第几个数的函数。

\(n_a,n_b,n_c\leq 10^5\)。

\(Solution\)

显然的做法是先枚举这个数在哪个数组中,再在三个数组中二分。这个次数是\(log^2\)的。

我们如果每次确定一些数比第\(k\)个数小,那我们可以直接将这些数删掉。

(可以假设数组是无限长的(补上INF))这样每次访问三个数组的第\(\lfloor\frac{k}{3}\rfloor\)个元素,把这个元素最小的数组的前\(\lfloor\frac{k}{3}\rfloor\)个数删掉。这样\(k\)每次缩小\(\frac{1}{3}\),当\(k\leq2\)时我们就可以很容易得到答案。\(k\leq 3\times 10^5\)最多被缩小\(31\)次变为\(2\),操作次数为\(93\)。\(k=2\)时直接询问三个数组前两个位置就可以得到答案。这样总操作次数不会超过\(99\)。

//190ms	1704kb
#include "kth.h"
#include <algorithm> int query_kth(int n_a, int n_b, int n_c, int k)
{
const int myINF=0x7fffffff;
int nowa=-1,nowb=-1,nowc=-1,delta,a,b,c,mn;
while(k>2)
{
delta=k/3;
a=nowa+delta<=n_a?get_a(nowa+delta):myINF,
b=nowb+delta<=n_b?get_b(nowb+delta):myINF,
c=nowc+delta<=n_c?get_c(nowc+delta):myINF;
mn=std::min(a,std::min(b,c));
if(mn==a) nowa+=delta;
else if(mn==b) nowb+=delta;
else if(mn==c) nowc+=delta;
k-=delta;
}
int A[7];
A[1]=get_a(nowa+1), A[2]=get_a(nowa+2);
A[3]=get_b(nowb+1), A[4]=get_b(nowb+2);
A[5]=get_c(nowc+1), A[6]=get_c(nowc+2);
std::sort(A+1,A+7);
return A[k];
}

UOJ.52.[UR #4]元旦激光炮(交互 思路)的更多相关文章

  1. UOJ#52. 【UR #4】元旦激光炮(交互)

    题意 给出三个已经排好序的数组$a, b, c$ 在$100$次询问内找出第$k$小的元素 Sol 一种很显然的$log^2n$的做法:首先在$a$中二分,然后再$b,c$中二分.这样可以得到$60$ ...

  2. Uoj 52. 【UR #4】元旦激光炮 神题+交互题

    Code: #include "kth.h" #include<iostream> int minn(int x,int y){return x<y?x:y;}; ...

  3. [UOJ #52]【UR #4】元旦激光炮

    题目大意:交互题,给你三个有序数组,长度分别为$n\_a,n\_b,n\_c$,都不超过$10^5$.三个函数$get\_a(i),get\_b(i),get\_c(i)$,分别返回$a_i,b_i, ...

  4. #52. 【UR #4】元旦激光炮 (交互式题)

    链接:http://uoj.ac/problem/52 刚刚越过绝境长城,只见天空中出现了炫目的光芒 —— 圣诞老人出现了. 元旦三侠立刻进入战斗.生蛋侠.圆蛋侠和零蛋侠分别有 na,nb,ncna, ...

  5. UOJ 52 元旦激光炮

    http://uoj.ac/problem/52 题意:每次可以得到3个序列中 思路:每次分别取出三个序列的K/3长度的位置,取最小的那个,然后每次减掉它,总复杂度是Nlog3N #include & ...

  6. UOJ52——【UR #4】元旦激光炮

    1.题目大意:就是给你三个数组啦,然后让你找到其中的第K大,但是,不可以直接访问数组,必须通过一种函数,最后的分数 是看调用几次这个函数,100次以内10分,2000以内6分.... 2.分析:最开始 ...

  7. UOJ.26.[IOI2014]Game(交互 思路)

    题目链接 \(Description\) 有一张\(n\)个点的图.M每次询问\((u,v)\),你需要回答图中\((u,v)\)间是否有边.如果M可以用\(<n(n-1)/2\)次询问确定图中 ...

  8. 【uoj#51】[UR #4]元旦三侠的游戏 博弈论+dp

    题目描述 给出 $n$ 和 $m$ ,$m$ 次询问.每次询问给出 $a$ 和 $b$ ,两人轮流选择:将 $a$ 加一或者将 $b$ 加一,但必须保证 $a^b\le n$ ,无法操作者输,问先手是 ...

  9. UOJ 【UR #5】怎样跑得更快

    [UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...

随机推荐

  1. Linux-Xshell会话保持

    1.Xshell客户端设置 2.服务端设置 修改/etc/ssh/sshd_config文件,找到 ClientAliveInterval 0和ClientAliveCountMax 3并将注释符号( ...

  2. git 学习小记之记住https方式推送密码

    昨天刚刚学了点git基础操作,但是不幸的是Git@OSC给出公告说尽量使用 https 进行操作.可是在用 https 进行 push 时,都需要输入帐号和密码. 各种百度谷歌之后在Git@OSC官网 ...

  3. Myeclipse 工具优化 [内存一直增加, jsp,javascript 编辑很卡]

    首先看这篇随笔 地址: Myeclipse/STS 首次在本地部署配置一个Spring MVC 项目 (十二) [http://www.cnblogs.com/editor/p/3915239.htm ...

  4. Vue模板语法V-bind

    一.插值 1.文本 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  5. Windows命令-系统木马取样

    1.前言 工作中偶尔会遇到去现场提取木马样本回公司分析的情况.如果是生产环境下,不方便安装各类抓包.安全软件时.能用系统自带的命令去定位出木马程序相关的信息是最理想不过的状态. 2.Windows常用 ...

  6. 简单解读linux的/proc下的statm、maps、memmap 内存信息文件分析【转】

    转自:https://blog.csdn.net/sctq8888/article/details/7398776 转载自:http://hi.baidu.com/deep_pro/blog/item ...

  7. Tesseract-OCR 3.05 多过语言文字识别(运行程序+中英日韩语言包)

    最新版本 静态编译 tesseract 3.05.00dev leptonica-1.73 libgif 5.1.3 : libjpeg 8c : libpng 1.6.16 : libtiff 3. ...

  8. dede列表页读取当前栏目名称

    list或者arclist之内使用[field:typename/]之外使用{dede:field name='typename'/}

  9. java 通过异常处理错误

    java的基本理念是"结构不佳的代码不能够运行" 一.概念 发现错误的理想时机是编译阶段,然而,编译期间并不能找出所有的错误,余下的问题必须在运行时期解决. 二.基本异常 异常情形 ...

  10. unmappable character for US-ASCII

    编码错误编译时加-encoding UTF-8即可 :javac -encoding UTF- file.java //