题目链接:点击打开链接
最多只会发生一次转向,所以枚举在每一个点转向的情况,分左右两边枚举
代码:
#include <iostream>
#include <algorithm>
using namespace std;
int l[2010];
int r[2010];
int N,T;
int resT;
int ans;
int main()
{
while(cin>>N>>T){
ans=-1;
int ll=0,rl=0;
int t;
resT=T;
while(N--){
cin>>t;
if(t<=0){
l[++ll]=-t;
}
else{
r[++rl]=t;
}
}
l[0]=0;
r[0]=0;
sort(l+1,l+ll+1);
sort(r+1,r+rl+1);
for(int i=0;i<=ll;i++){
if(l[i]>T){
break;
}
resT=T-2*l[i];
int t1=0;
while(r[t1]<=resT&&t1<=rl){
t1++;
}
t1--;
ans=max(i+t1,ans);
}
for(int i=0;i<=rl;i++){
if(r[i]>T){
break;
}
resT=T-2*r[i];
int t1=0;
while(l[t1]<=resT&&t1<=ll){
t1++;
}
t1--;
ans=max(i+t1,ans);
}
cout<<ans<<endl;
}
return 0;
}