题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4907
解题思路:就是把空余的时间单独用一个数组存起来,然后查找时用二分查找。但是这题却WA啦好多次,当时想死的心都有啦,后面才发现时数组开小了。。。
code:
#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> using namespace std; int a[200010]; int b[200010]; int main() { int T,n,m,x,maxx,i; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); memset(a,0,sizeof(a)); maxx=-1; for(i=0;i<n;i++) { scanf("%d",&x); //maxx=max(maxx,x); a[x]=1; } //printf("%d\n",maxx); int len=0; for(i=1;i<=200005;i++) { if(a[i]==0) { b[len++]=i; } } //b[len]=maxx+1; while(m--) { scanf("%d",&x); //if(x<=maxx) { int l=0,r=len-1,mid; int flag=0; while(l<=r) { mid=(l+r)/2; if(b[mid]>x) { r=mid-1; } else if(b[mid]<x) { l=mid+1; } else if(b[mid]==x) { flag= 1; printf("%d\n",b[mid]); break; } } if(!flag)printf("%d\n",b[l]); } } } return 0; }
hdu 4902 Task schedule
时间: 2024-11-03 21:45:37