UOJ.52.[UR #4]元旦激光炮(交互 思路)
\(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]元旦激光炮(交互 思路)的更多相关文章
- UOJ#52. 【UR #4】元旦激光炮(交互)
题意 给出三个已经排好序的数组$a, b, c$ 在$100$次询问内找出第$k$小的元素 Sol 一种很显然的$log^2n$的做法:首先在$a$中二分,然后再$b,c$中二分.这样可以得到$60$ ...
- Uoj 52. 【UR #4】元旦激光炮 神题+交互题
Code: #include "kth.h" #include<iostream> int minn(int x,int y){return x<y?x:y;}; ...
- [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, ...
- #52. 【UR #4】元旦激光炮 (交互式题)
链接:http://uoj.ac/problem/52 刚刚越过绝境长城,只见天空中出现了炫目的光芒 —— 圣诞老人出现了. 元旦三侠立刻进入战斗.生蛋侠.圆蛋侠和零蛋侠分别有 na,nb,ncna, ...
- UOJ 52 元旦激光炮
http://uoj.ac/problem/52 题意:每次可以得到3个序列中 思路:每次分别取出三个序列的K/3长度的位置,取最小的那个,然后每次减掉它,总复杂度是Nlog3N #include & ...
- UOJ52——【UR #4】元旦激光炮
1.题目大意:就是给你三个数组啦,然后让你找到其中的第K大,但是,不可以直接访问数组,必须通过一种函数,最后的分数 是看调用几次这个函数,100次以内10分,2000以内6分.... 2.分析:最开始 ...
- UOJ.26.[IOI2014]Game(交互 思路)
题目链接 \(Description\) 有一张\(n\)个点的图.M每次询问\((u,v)\),你需要回答图中\((u,v)\)间是否有边.如果M可以用\(<n(n-1)/2\)次询问确定图中 ...
- 【uoj#51】[UR #4]元旦三侠的游戏 博弈论+dp
题目描述 给出 $n$ 和 $m$ ,$m$ 次询问.每次询问给出 $a$ 和 $b$ ,两人轮流选择:将 $a$ 加一或者将 $b$ 加一,但必须保证 $a^b\le n$ ,无法操作者输,问先手是 ...
- UOJ 【UR #5】怎样跑得更快
[UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...
随机推荐
- matplotlib交互模式与pacharm单独Figure设置
matplotlib交互模式与pacharm单独Figure设置 觉得有用的话,欢迎一起讨论相互学习~Follow Me Matpotlib交互模式 在运行python程序时有时候需要生成以下的 动态 ...
- bzoj千题计划200:bzoj3106: [cqoi2013]棋盘游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=3106 白棋如果第一步不能赢,那么一定输 因为可以黑棋走的距离比白棋大,黑棋可以下一步吃掉白棋,也可以 ...
- 高斯—若尔当(约当)消元法解异或方程组+bitset优化模板
高斯消元法是将矩阵化为上三角矩阵 高斯—若尔当消元法是 选定主元后,将主元化为1,枚举除主元之外的所有行进行消元 即将矩阵化为对角矩阵,这样不用回代 bitset<N>a[N]; int ...
- Linux - ssh 连接慢解决
解决 ssh 链接慢 sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config sed -i ...
- 工作目录与os.getcwd()
假设某程序在/root/a/aa.py,在shell,当前pwd为/root,输入./a/aa.py运行py程序,则爱程序的工作目录是/root.而不是程序所在文件夹,os.getcwd()就是查看工 ...
- python爬虫:抓取下载电影文件,合并ts文件为完整视频
目标网站:https://www.88ys.cc/vod-play-id-58547-src-1-num-1.html 反贪风暴4 对电影进行分析 我们发现,电影是按片段一点点加载出来的,我们分别抓取 ...
- Python 入门基础9 --函数基础2 实参与形参
今日内容: 一.函数参数 1.形参与实参定义 2.实参分类 3.形参分类 4.可变参数的整体使用 一.形参与实参定义 def fn(参数们): pass 1.1 形参 定义函数,在括号内声明的变量名, ...
- perl6: Proc::Async (new)
# command with arguments my $proc = Proc::Async.new('whoami'); # subscribe to new output from out an ...
- python运行execjs解密js
[转]http://www.knowsky.com/1041161.html python 记一次计算qzonetoken经历 之前用python写了个发表说说的爬虫,但最近发现在post数据时返回不 ...
- 测试开发之Django——No4.Django中前端框架的配置与添加
我们在开发一个web项目的时候,虽然我们不是专业开发,但是我们也想要做出来一个美美的前端页面. 这种时候,百度上铺天盖地的前端框架就是我们的最好选择了. 当然,在网上直接下载的框架,我们是不能直接用的 ...