PAT 1085. Perfect Sequence (25)

来源:互联网 发布:麻辣it网 编辑:程序博客网 时间:2024/05/18 06:27

一个很简单的题目,但是交了好几次都没有过,现在来分析一下:
第一次提交想当然的排序,然后找最小的,然后找到对应的最大值。
第二次是以为不是输出个数,是输出最大数,然后~
第三次终于想清楚了,遍历加二分,但是为啥还有一个没过呢,最后实在没办法查了一下资料,发现10^9 * 10 ^9超出int范围,改成long long就OK了
代码如下:

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n;long long a[100005];int midSearch(int i,long long max){    int left = i,right = n;    while(left < right)    {        int mid = (left + right)/2;        if(a[mid] > max)        {            right = mid - 1;        }else if(a[mid] < max)        {            left = mid +1;        }else            break;    }    if(a[(left + right)/2] == max)        return (left + right)/2 - i +1;    else    return (left + right)/2 - i;}int main(){  int p;  while(cin>>n>>p)  {    for(int i = 0; i < n; i++)    cin>>a[i];    sort(a,a+n);    int t = 0;    for(int i = 0; i < n; i++)    {      long long max = a[i] * p;      int number  = midSearch(i,max);      if(t <= number)          t = number;     }    cout<<t<<endl;  }  return 0;}
0 0
原创粉丝点击