题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1085
二分查找(可以使用STL),同时int*int 可能超出int范围,就被这个case给坑了。
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
vector<int>vec;
int n,p,i,ans,tmp,x;
long long xx;
while(scanf("%d%d",&n,&p)!=EOF){
vec.clear();
ans=0;
for(i=0;i<n;i++){
scanf("%d",&x);
vec.push_back(x);
}
sort(vec.begin(),vec.end());
for(i=0;i<n;i++){
xx=(long long)((long long)vec[i]*(long long)p);
int maxpos;
if(xx>1000000000) maxpos=n-1;
else maxpos=upper_bound(vec.begin(),vec.end(),(int)xx)-vec.begin()-1;
//printf("maxpos:%d i=%d\n",maxpos,i);
tmp=maxpos-i+1;
if(ans<tmp){
ans=tmp;
}
}
printf("%d\n",ans);
}
return 0;
}
/*
4 2
4 3 3 2
6 3
3 6 9 10 11 13
*/