Task schedule

Problem Description
有一台机器,而且给你这台机器的工作表。工作表上有n个任务,机器在ti时间运行第i个任务,1秒就可以完毕1个任务。

有m个询问,每一个询问有一个数字q。表示假设在q时间有一个工作表之外的任务请求,请计算何时这个任务才干被运行。

机器总是依照工作表运行,当机器空暇时马上运行工作表之外的任务请求。
 
Input
输入的第一行包括一个整数T, 表示一共同拥有T组測试数据。

对于每组測试数据:

第一行是两个数字n, m,表示工作表里面有n个任务, 有m个询问。

第二行是n个不同的数字t1, t2, t3....tn,表示机器在ti时间运行第i个任务。

接下来m行,每一行有一个数字q,表示在q时间有一个工作表之外的任务请求。



特别提醒:m个询问之间是无关的。

[Technical Specification]

1. T <= 50

2. 1 <= n, m <= 10^5

3. 1 <= ti <= 2*10^5, 1 <= i <= n

4. 1 <= q <= 2*10^5

 
Output
对于每个询问,请计算并输出该任务何时才干被运行。每个询问输出一行。
 
Sample Input
1
5 5
1 2 3 5 6
1
2
3
4
5
 
Sample Output
4
4
4
4
7
 
Source

解题思路:

一開始想的是假设当前时间没有被占用,时间输出当前时间,假设被占用,就向后查找。知道找到空暇时间为止,但这是超时的.....每次询问都要向后查找,并且询问的次数又那么多,肯定不行。后来打表预处理一下。把每一个时间的任务的空暇时间预先处理。这样查询的时候就O(1)了。

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn=1e5+5;
bool hash[maxn*2];
int f[maxn*2];
int T,n,m,ti,q; void prepare()
{
int cur=maxn*2;//始终是空暇时间
for(int i=maxn*2;i>=1;i--)
{
if(hash[i]==0)
cur=i;
f[i]=cur;
}
} int main()
{
scanf("%d",&T);
while(T--)
{
memset(hash,0,sizeof(hash));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&ti);
hash[ti]=1;
}
prepare();
for(int i=1;i<=m;i++)
{
scanf("%d",&q);
printf("%d\n",f[q]);
}
}
return 0;
}

[BestCoder Round #3] hdu 4907 Task schedule (模拟简单题)的更多相关文章

  1. HDU 4907 Task schedule

    对于询问q 假设q不存在直接输出q 否则输出后面第一个不存在的数 从2*10^5到1遍历一边ac #include<bits/stdc++.h> using namespace std; ...

  2. 题解报告:hdu 4907 Task schedule

    Problem Description 有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务.有m个询问,每个询问有一个数字q,表示如果在q时间 ...

  3. HDU 3572 Task Schedule(拆点+最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  4. HDU 3572 Task Schedule (最大流)

    C - Task Schedule Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  5. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  6. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  7. hdu 3572 Task Schedule

    Task Schedule 题意:有N个任务,M台机器.每一个任务给S,P,E分别表示该任务的(最早开始)开始时间,持续时间和(最晚)结束时间:问每一个任务是否能在预定的时间区间内完成: 注:每一个任 ...

  8. hdu 3572 Task Schedule (dinic算法)

    pid=3572">Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. hdu 3572 Task Schedule(最大流&amp;&amp;建图经典&amp;&amp;dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

随机推荐

  1. 神经网络(NN)+反向传播算法(Backpropagation/BP)+交叉熵+softmax原理分析

    神经网络如何利用反向传播算法进行参数更新,加入交叉熵和softmax又会如何变化? 其中的数学原理分析:请点击这里.

  2. GNU编译器学习 --> 如何链接外部库【Linking with external libraries】

    库也就是我们常说的library,一个库是若干个已经编译过的目标文件(.obj)的集合,它可以被链接到程序里.那么我们最常见的使用就是,我们在编程时会调用一些函数,这些函数别人已经写好了,它就放在库里 ...

  3. python爬虫(三)

    Requests模块 这个库的标准文档有个极其幽默的地方就是它的中文翻译,我就截取个开头部分,如下图: 是不是很搞笑,在正文中还有许多,管中窥豹,可见一斑.通过我的使用,感觉Requests库的确是给 ...

  4. CSDN编写技巧--CSDN中高亮显示代码

    1, 最近在编写CSDN博客的时候,有种生不如死的感觉,就是如下的现象: 除了图中圈红圈的部分,还有就是背景色是灰色,并且,关键字不高亮显示,起始正常的情况下,也会有这块区域的最上边这行. 2, 有一 ...

  5. 洛谷 P2335 SDOI 2005 毒瘤 位图(也补上注释了)

    #include<iostream> #include<cstdio> #include<queue> #include<cstring> using ...

  6. package control(转载)

    Package Control(扩展包管理器)   []Package Control 可以看做是一个ST的扩展管理器,可以去下载.安装.删除 Sublime Text 3的各种插件.皮肤等.   [ ...

  7. 创建私有 Gems 源

    1.安装依赖 yum install gem -y gem install builder   2.安装.配置nginx的文件列表 添加/etc/nginx/default.d/mirrors.con ...

  8. NYOJ-770仿射密码,乘数密码与移位密码的结合;

    仿射密码 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 ->   Link   <- 和乘数密码差不多: 加密算法:Ek(m)=(k1*m+k2)%q;gcd(k ...

  9. 博客搬迁至Gitcafe

    原先的Github pages貌似在国内被墙了,导致搜索引擎一直没有索引到,今天一怒之下迁到Gitcafe 虽然之前的模板用不成,害我重新找了一套,改了好半天,不过总算弄完了

  10. 【判断二分图】C. Catch

    https://www.bnuoj.com/v3/contest_show.php?cid=9154#problem/C [题意] 给定一个无向图,给定小偷的起始位置 从这个起始位置开始,小偷可以在单 ...