BestCoder3 1001 Task schedule(hdu 4907) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4907
题目意思:给出工作表上的 n 个任务,第 i 个任务需要 ti 这么长的时间(持续时间是ti ~ ti+1)来完成。有m 个询问,每个询问是一个数字q,表示q 时间上有一个非 n 个任务之外的任务请求。机器是按照工作表的任务时间来执行的,如果有空档时间,它会执行工作表之外的任务请求。
直接做,果断超时!1e5 * 2e5 !!!(m次询问+q次遍历 的最坏情况)
二分解决之~~~~一开始我不是只存储空闲时间啦,我还把工作表上要处理的n 个任务的时间都存在一起,导致写的二分不三不四啊~~~~= =
二分思想其实好容易理解,真正运用起来还是第一次啊~~~好好纪念纪念 ^_^
(1)这个是参考别人的,不过时间稍微用得有点多
Exe time : 
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = 2e5;
int a[maxn], b[maxn]; int main()
{
int T, n, m, ti, query;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
memset(a, , sizeof(a));
memset(b, , sizeof(b));
scanf("%d%d", &n, &m);
for (int i = ; i < n; i++)
{
scanf("%d", &ti);
a[ti] = ;
}
int len = ;
for (int i = ; i <= maxn; i++)
{
if (!a[i])
b[len++] = i; // 把空余时间存储起来
}
for (int i = ; i < m; i++)
{
scanf("%d", &query);
if (!a[query])
printf("%d\n", query);
else
{
int flag = ;
int l = , r = len-;
while (l <= r)
{
int mid = (l+r)/;
if (b[mid] == query)
{
printf("%d\n", b[mid]);
flag = ;
break;
}
else if (b[mid] < query)
l = mid+;
else if (b[mid] > query)
r = mid-;
}
if (!flag)
printf("%d\n", b[l]);
}
}
}
}
return ;
}
(2) 我的改良版本(其实不需要把maxn,也就是2e5 个所有空闲时间都存起来啦,只要把原来n个任务中最大的时间,再+1的那个时间存起来即可!!!)
所以maxi + 1 就是这个意思啦。
Exe time : 
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = 2e5;
int vis[maxn], b[maxn]; int main()
{
int T, n, m, t, q;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
memset(vis, , sizeof(vis));
scanf("%d%d", &n, &m);
int maxi = ;
for (int i = ; i <= n; i++)
{
scanf("%d", &t);
maxi = max(maxi, t);
vis[t] = ;
}
int len = ;
for (int i = ; i <= maxi+; i++) // maxi+1表示n个任务中花费时间最长为maxi,假设遇到一个maxi/maxi+1的任务,那么这个任务执行时间就是maxi+1
{
if (!vis[i])
b[len++] = i;
}
while (m--)
{
scanf("%d", &q);
if (!vis[q])
printf("%d\n", q);
else
{
int l = , r = len-;
int flag = ;
while (l <= r)
{
int mid = (l+r)>>;
if (b[mid] == q)
{
flag = ;
printf("%d\n", b[mid]);
break;
}
else if (b[mid] > q)
r = mid-;
else if (b[mid] < q)
l = mid+;
}
if (!flag)
printf("%d\n", b[l]);
}
}
}
}
return ;
}
BestCoder3 1001 Task schedule(hdu 4907) 解题报告的更多相关文章
- BestCoder12 1001.So easy(hdu 5058) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5058 (格式有点问题,为了方便阅读---整个复制下来吧) 题目意思:给出两个长度都为 n 的集合你,问 ...
- BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908 题目意思:给出 一个从1~N 的排列你和指定这个排列中的一个中位数m,从这个排列中找出长度为奇数 ...
- BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4956(它放在题库后面的格式有一点点问题啦,所以就把它粘下来,方便读者观看) 题目意思:给出一个范围 [ ...
- "1001. A+B Format (20)" 解题报告
Github : git@github.com:Circlecos/object-oriented.git PDF Of Markdown : "1001. A+B Format (20)& ...
- BestCoder8 1001.Summary(hdu 4989) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4989 题目意思:给出 n 个数,然后将这些数两两相加,得到 n*(n-1) /2 对和,把重复的和去掉 ...
- BestCoder24 1001.Sum Sum Sum(hdu 5150) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5150 题目意思:就是直接求素数. 不过 n = 1,也属于答案范围!!只能说,一失足成千古恨啊---- ...
- BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5108 题目意思:给出一个数正整数 N,N <= 1e9,现在需要找出一个最少的正整数 M,使得 ...
- BestCoder17 1001.Chessboard(hdu 5100) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5100 题目意思:有一个 n * n 的棋盘,需要用 k * 1 的瓷砖去覆盖,问最大覆盖面积是多少. ...
- BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome N ...
随机推荐
- CountDownLatch、CyclicBarrier、Samephore浅谈三大机制
CountDownLatch.CyclieBarrier与SamePhore都可用来控制线程的执行,那么他们之间有什么区别呢 CountDownLatch CountDowenlatch可以看成一个线 ...
- BZOJ3270 博物館 概率DP 高斯消元
BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...
- C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型
在C#中,存在两个泛型修饰符:in和out,他们分别对应逆变委托和协变委托. 我们知道,在C#中要想将一个泛型对象转换为另一个泛型对象时,必须要将一个泛型对象拆箱,对元素进行显式或隐式转换后重新装箱. ...
- BT中的磁力链接(转)
注意:磁力链接不是迅雷的,而是BT网络中的一种协议. 磁力链接与种子文件 磁力链接并不是一个新概念,早在2002年,相关的标准草稿就已经制定了.但直到2012年海盗湾为规避版权问题删除了站点上的所有T ...
- Direct2D教程(二)来看D2D世界中的Hello,World
引子 任何一门语言的第一个教程几乎都是Hello,world.我们也不例外,但是这里不是教大家打印Hello,world,而是编写一个简单的D2D绘制程序,让大家对Direct2D的程序结构及编程方法 ...
- git/icode操作记录
之前有一篇文章写了团队git的管理方式:link 今天处理了一个自动退款的脚本.提交到git.步骤如下: 1. 切换到本地master,update: git checkout master git ...
- css3 - 基本选择器
有人说类选择器最好不要超过三层,其实我也是这样认为的,不是吗? 选择器分为四大类 标签.全选(相对于子类继承了0.1).类.ID 权值分别是:1->0.1->10->100(权值可叠 ...
- Win7/Win2008下IIS配置Asp网站启用父路径的设置方法(已解决)
Win7/Win2008下IIS配置Asp网站启用父路径的设置方法(已解决) 在Win7/Win2008下IIS配置Asp网站启用父路径的设置方法与win2003下不同,看看下图就知道了.
- javascript之Ajax获取和设置标头
XMLHttpRequest对象中与标头有关的方法: setRequestHeader(<header>,<value>)--用指定值设置标头. getResponseHead ...
- go mysql dsn
https://github.com/go-sql-driver/mysql#dsn-data-source-name DSN (Data Source Name) The Data Source N ...