链接:http://uoj.ac/problem/52

刚刚越过绝境长城,只见天空中出现了炫目的光芒 —— 圣诞老人出现了。

元旦三侠立刻进入战斗。生蛋侠、圆蛋侠和零蛋侠分别有 na,nb,ncna,nb,nc 个激光炮。生蛋侠的激光炮的威力分别为 a0,a1,…,ana−1a0,a1,…,ana−,圆蛋侠的激光炮的威力分别为 b0,b1,…,bnb−1b0,b1,…,bnb−,零蛋侠的激光炮的威力分别为 c0,c1,…,cnc−1c0,c1,…,cnc−。

元旦三侠的激光炮的威力已经按从小到大的顺序排好序了,即 ai−≤aiai−≤ai,bi−≤bibi−≤bi,ci−≤cici−≤ci。

由于元旦三侠精力有限,他们得废弃掉 kk 个激光炮。为了更好地进行战斗,他们决定废弃掉威力前 kk 小的激光炮。

赶快帮助元旦三侠,让激光炮投入战斗吧!你只需要告诉他们威力第 kk 小的激光炮威力是多少。

任务
你需要编写一个函数 query_kth,以确定威力值第 kk 小的激光炮威力值是多少。 query_kth(n_a, n_b, n_c, k)
n_a:生蛋侠拥有的激光炮数目 nana。保证 na≥0na≥。
n_b:圆蛋侠拥有的激光炮数目 nbnb。保证 nb≥0nb≥。
n_c:零蛋侠拥有的激光炮数目 ncnc。保证 nc≥0nc≥。
kk:要查询的排名 kk。保证 ≤k≤na+nb+nc1≤k≤na+nb+nc。
你可以调用三个函数 get_a、get_b、get_c 以帮助你确定第 kk 小的激光炮。我们会根据你调用这三个函数的总次数评分。 get_a(i) 将返回 aiai。如果 ii 在 ≤i<na0≤i<na 之外,该函数将返回 。
get_b(i) 将返回 bibi。如果 ii 在 ≤i<nb0≤i<nb 之外,该函数将返回 。
get_c(i) 将返回 cici。如果 ii 在 ≤i<nc0≤i<nc 之外,该函数将返回 。
在一组测试数据中,query_kth 只会被调用一次。 实现细节
本题只支持 C/C++/Pascal。 你只能提交一个源文件实现如上所述的 query_kth 函数,并且遵循下面的命名和接口。 C/C++ 你需要包含头文件 kth.h。 int query_kth(int n_a, int n_b, int n_c, int k);
函数 get_a, get_b, get_c 的接口信息如下。 int get_a(int p);
int get_b(int p);
int get_c(int p);
Pascal 你需要使用单元 graderhelperlib。 function query_kth(n_a, n_b, n_c, k : longint) : longint;
函数 get_a, get_b, get_c 的接口信息如下。 function get_a(p : longint) : longint;
function get_b(p : longint) : longint;
function get_c(p : longint) : longint;
如果有不清楚的地方,见样例及测评库下载,内附了样例程序。 评测方式
评测系统将读入如下格式的输入数据: 第 行: na,nb,nc,kna,nb,nc,k
第 行:nana 个整数,第 ii 个整数表示 aiai。
第 行:nbnb 个整数,第 ii 个整数表示 bibi。
第 行:ncnc 个整数,第 ii 个整数表示 cici。
在 query_k 返回后,评测系统将输出你的答案以及 get_a, get_b, get_c 三个函数的总调用次数。 样例一
input output explanation 所有激光炮从小到大排序后为 ,,,,,,,,,,,,,,,所以第 小的数为 。输出的第二个整数 为总调用次数,你可以认为这是一个调用了 次 get_a, get_b, get_c 函数的程序的输出。 样例二
见样例及测评库下载。 限制与约定
共 个测试点,每个测试点 分。设你的程序 get_a, get_b, get_c 函数的调用次数为 tt。当 t≤100t≤ 时得 分,否则当 t≤2000t≤ 时得 分,否则不得分。 测试点编号 特殊限制
na,nb,nc≤30na,nb,nc≤
nc=0nc= 无 对于所有测试点,≤na,nb,nc≤≤na,nb,nc≤,≤ai,bi,ci≤≤ai,bi,ci≤。 交互式类型的题目怎么本地测试 时间限制:1s1s
空间限制:256MB

题干

第一次接触交互式的题目,挺费事的,但还挺有趣的。

思路:

  如果你一个一个读取就超时了,但如果我读每组数的第k/3个,可以保证的是最小的那一列肯定在所有数的前K小。这句话是关键。

  然后k就减小k/3,重复以上操作,直到k为零。

  注意一下细节问题就行啦。

#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include"kth.h"
using namespace std;
int query_kth(int n_a,int n_b,int n_c,int k)
{
int ca=,cb=,cc=;
int ta,tb,tc;
int minn,t;
while(k)
{
int t=max(,k/-);
ta=get_a(ca+t),tb=get_b(cb+t),tc=get_c(cc+t);
minn=min(ta,min(tb,tc));t++;
if(minn==ta) ca+=t;else if(minn==tb) cb+=t;else cc+=t;
k-=t;
}
return minn;
}

代码

#52. 【UR #4】元旦激光炮 (交互式题)的更多相关文章

  1. UOJ.52.[UR #4]元旦激光炮(交互 思路)

    题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\) ...

  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. UOJ#52. 【UR #4】元旦激光炮(交互)

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

  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#51】[UR #4]元旦三侠的游戏 博弈论+dp

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

  8. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  9. NOI真题记录

    NOI2001 食物链,拓展域并查集. 炮兵阵地,棋盘状压DP. NOI2002 银河英雄传说,kruskal重构树/带权并查集. 贪吃的九头龙,树形DP. NOI2003 逃学的小孩,树形DP,二次 ...

随机推荐

  1. cygwin Could not create directory '/home/Administrator/.ssh'

    在cygwin下运行: ssh-keygen -C "634772208@qq.com" -t rsa 时,出现如下错误: cygwin Could not create dire ...

  2. Python 黑帽子第二章运行截图

  3. synergy的配置使用

    1.http://blog.csdn.net/qq_16618179/article/details/54094636 2.两个版本要一致 3.synergy  fail to connect sec ...

  4. LearnToRank

    1 概述 RankNet.LambdaRank和LambdaMART是三个关系非常紧密的机器学习排序算法.简而言之,RankNet是最基础,基于神经网络的排序算法:而LambdaRank在RankNe ...

  5. HashMap为什么比数组查询快

    通常数组不直接保存值,而是通过保存值的list.然后对list中的“值”使用equals方法比较,这部分查询速度自然慢.但是如果有好的散列函数,数组的每个位置就只有较少的“值”.因此,不是查询所有的l ...

  6. no more URLs to fetch

    Generator: records selected for fetching, exiting ... Stopping at depth= - no more URLs to fetch. 出现 ...

  7. 【Hadoop】HDFS笔记(三):HDFS的Shell操作

    HDFS处理文件的命令和Linux命令差不多,但注意区分大小写. (Linux区分大小写,Windows不区分大小写) 一.fs命令 键入命令"./bin/hadoop fs"将输 ...

  8. 也谈Flash mmorpg地图问题【转】

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式:1.整图2.Tile元素拼装3.栅格化切片 整图 整图加载很好理解直接加载一张背景图.这 ...

  9. tensorflow weight_variable going

    # coding: utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data d ...

  10. Golang : flag 包简介

    在 Golang 程序中有很多种方法来处理命令行参数.简单的情况下可以不使用任何库,直接处理 os.Args:其实 Golang 的标准库提供了 flag 包来处理命令行参数:还有第三方提供的处理命令 ...