BestCoder Round #3HDU 4907
1. HDU 4907:http://acm.hdu.edu.cn/showproblem.php?pid=4907
中文题我就不说题意了,直接说解题思路吧!
① 第一种思路就是我比赛时的思路,将a数组先全部清为零,当输入机器在ti时间执行第i个任务时,将a[ti]置为1,开始输入q(表示在q时间有一个工作表之外的任务请求)写一个循环,让a数组从a[q]开始循环,直到找到a[J]为0,输出j。这种方法时间超限了,但是在输入q之前先预处理,打一个表就不会超时了。
附上代码:
#include<stdio.h>
#include<string.h>
int t[],s[];
int main()
{
int T,m,n,i,j,k,a;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
memset(t,,sizeof(t));
for(i=; i<=m; i++)
{
scanf("%d",&a);
t[a]=;
}
memset(s,,sizeof(s));
k=;
for(i=; i<=; i++)
if(t[i]==)
{
for(j=k; j<=i; j++)
s[j]=i;
k=i+;
}
while(n--)
{
scanf("%d",&a);
printf("%d\n",s[a]);
}
}
return ;
}
②第二种思路是二分法,输入a[],后排下序,然后记录每个数字出现的位置,对于询问q,如果q不存在直接输出q,
如果q存在,假设q所在的位置为pos,那么二分【pos,n】,二分判断的依据是如果mid-p==a[mid]-a[p],那么left=mid+1,否则right=mid-1.
附上代码:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
#define maxn 100010
int a[maxn];
int main()
{
int T,i;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
for(i=; i<n; i++)
scanf("%d",&a[i]);
sort(a,a+n);
while(m--)
{
int q;
scanf("%d",&q);
int pos=int(lower_bound(a,a+n,q)-a);
if(pos==n||a[pos]!=q)
printf("%d\n",q);
else
{
int left=pos+,right=n;
while(left<right)
{
int mid=(left+right)>>;
if(a[mid]-q==mid-pos)
left=mid+;
else
right=mid;
}
printf("%d\n",a[left-]+);
}
}
}
return ;
}
后记:
函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。
BestCoder Round #3HDU 4907的更多相关文章
- [BestCoder Round #3] hdu 4907 Task schedule (模拟简单题)
Task schedule Problem Description 有一台机器,而且给你这台机器的工作表.工作表上有n个任务,机器在ti时间运行第i个任务,1秒就可以完毕1个任务. 有m个询问,每一个 ...
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
- bestcoder Round #7 前三题题解
BestCoder Round #7 Start Time : 2014-08-31 19:00:00 End Time : 2014-08-31 21:00:00Contest Type : ...
- 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 ...
- Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
- BestCoder Round #88
传送门:BestCoder Round #88 分析: A题统计字符串中连续字串全为q的个数,预处理以下或加个cnt就好了: 代码: #include <cstdio> #include ...
随机推荐
- 我的Python成长之路---第一天---Python基础(6)---2015年12月26日(雾霾)
七.列表——list Python的列表是一种内置的数据类型,是由Python的基本数据类型组成的有序的集合.有点类似C语言的数组,但与数组不同的是,Python在定义列表的时候不用指定列表的容积(长 ...
- HDOJ 1005
Input The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a ...
- 在OpenShift平台开发Node.js程序
设置process.env方便本地调试 --------------------- 修改~/.profile,增加下面两行,然后执行`. ~/.profile`: export OPENSHIFT_N ...
- android 高效显示Bitmap - 开发文档翻译
由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接 Displaying Bitmaps Efficiently 高效显示Bitmap Lea ...
- poll系统调用的内核态实现机制分析
版权所有,转载请标明出处 All right reserved,Copyright by 徐行而至 浅唱而归 前面已经比较详尽的分析了系统调用引发的内核执行过程,本文将继续分析一下linux2.6 ...
- Mac中MacPorts安装和使用
文章转载至http://www.zikercn.com/node/8 星期四, 06/07/2012 - 19:02 - 张慧敏 MacPorts简单介绍 MacPorts,以前叫做DarwinPor ...
- Java__jar包的简单操作
工作需要研究了下jar,这里就举个简单的例子,以helloworld为例吧 1.启动eclipse编写代码: 次步不做赘述 package cn.test.jar; public class Hell ...
- 【cocos2d-x】3.0使用cocos-console创建,编,部署游戏
原文地址:http://fengchenluoyu.duapp.com/272.html cocos2d-x 3.0開始添加了一个cocos-console组件,它位于cocos2d-x 3.0的to ...
- Android ListView 常见问题与使用总结
一.机制 ListView机制 - 先运行getCount.然后运行getView. 假设getCount返回0,不运行getView Gallery convertView不会复用.每次都返回NUL ...
- Linux - 输入输出流程序 代码(C)
输入输出流程序 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 使用输入输出流,控制文件流. STDIN_FILENO,STDOUT_FILENO代表标准 ...