hdu2217 2010.3.5
Visit
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 246 Accepted Submission(s): 108
Problem Description
Wangye is interested in traveling. One day,he want to make a visit to some
different places in a line. There are N(1<= N <= 2000) places located at points x1, x2, ..., xN (-100,000 ≤ xi ≤ 100,000).Wangye starts at HDU (x = 0), and he travels 1 distance unit in 1 minute . Hewant to know how many places he could visit at most, if he has T (1 <= T<= 200000 ) minutes.
Input
The input contains several test cases .Eachtest case starts with two number N and T which indicate the number of placesand the time respectively. Then N lines follows, each line has a number xiindicate the position of i-th place.
Output
For each test case, you should print thenumber of places,Wangye could visit at most, in one line.
Sample Input
5 16
-3
-7
1
10
8
Sample Output
4
Hint
In the sample, Wangye could visit (-3)first, then goes back to (0), whichcosts him 6 minutes.
Then he visits (1), (8), (10). So he could visit 4 places at most in 16minutes. :
Author
zjt
Recommend
lcy
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 2000+10
int pos[MAXN],neg[MAXN];
int lpos,lneg,n,t,ans,j;
bool cmp(int x,int y)
{
return (x<y);
}
int main()
{
int i,temp;
while (scanf("%d",&n)!=EOF)
{
scanf("%d",&t);
lpos=0;
lneg=0;
for(i=1;i<=n;i++)
{
scanf("%d",&temp);
if (temp>0)
{
lpos++;
pos[lpos]=temp;
}
else
{
lneg++;
neg[lneg]=-temp;
}
}
ans=0;
sort(pos+1,pos+lpos+1,cmp);
sort(neg+1,neg+lneg+1,cmp);
for(i=1;i<=lpos;i++)
for(j=1;j<=lneg;j++)
{
if ((pos[i]+2*neg[j]<=t)&&(i+j>ans))
ans=i+j;
if ((pos[i]*2+neg[j]<=t)&&(i+j>ans))
ans=i+j;
}
printf("%d\n",ans);
}
return 0;
}