链接: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. apache web 服务器

    0. 特性与特点 性能方面,apache 在设计时采用了以"进程"为基础的结构,自然进程比线程消耗了更多的系统开销,导致了 apache 在多处理器环境中性能有所下降: 因此,在对 ...

  2. 在KitKat(Android 4.4.2) 推送网址给手机

    弱者才会回避问题. 最近想把网址推送给手机实现后台下载,打算故技重施,用短信传送然后中断广播的方法实现隐蔽传送.试了半天发现怎么现在拦不住短信了.查了一下才发现原来Android4.4增加了一个安全机 ...

  3. Subset Sums

    链接 分析:dp[i][j]表示前i个数能够组成j的对数,可得dp[i][j]=dp[i-1][j]+dp[i-1][j-i],所以最后dp[n][sum/2]既是所求 /* PROB:subset ...

  4. C++之new和delete

    new 和 delete 是 C++ 用于管理 堆内存 的两个运算符,对应于 C 语言中的 malloc 和 free,但是 malloc 和 free 是函数,new 和 delete 是运算符.除 ...

  5. DTP模型之二:(XA协议之二)JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

    jotm只能用的xapool数据源,而且很少更新. 一.以下介绍Spring中直接集成JOTM提供JTA事务管理.将JOTM集成到Tomcat中. (经过测试JOTM在批量持久化时有BUG需要修改源码 ...

  6. 关于group_concat函数拼接字符超长的问题

    昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...

  7. jQuery.validator.addMethod方法的使用

    该方法有三个api接口参数,name,method,messages addMethod(name,method,message)方法 参数 name 是添加的方法的名字. 参数 method 是一个 ...

  8. TypeScript完全解读(26课时)_11.TypeScript完全解读-类型推论和兼容性

    11.TypeScript完全解读-类型推论和兼容性 在一些时候省略指令,ts会帮我们推断出省略的类型的地方适合的类型,通过学习ts的类型推论了解ts的推论规则 类型兼容性就是为了适应js灵活的特点, ...

  9. 二Java的常量与变量-1-1标识符

    类的名字就是标识符 起类名也是不能带空格的

  10. httpServlet,GenericServlet,Servlet源码分析

    httpServlet源码:   /* * Licensed to the Apache Software Foundation (ASF) under one or more * contribut ...