您的位置:首页 > 其它

PAT乙级1030 完美数列

2017-12-01 16:06 337 查看
这道题我只用了一次遍历,遗憾的是最后一个测试点无法通过,看到有人说最后一个测试点是大数问题,改了数据类型仍然不行,心累。

由于涉及最大最小问题,先对整个数组排序。从第一个元素开始标记,对以后的每个元素进行条件判断,当不满足题目条件,对标记+1,记录此时的数据个数,同时遍历并不需要暂停。这样遍历完成后有一个漏洞就是,如果所有数据满足第一个元素的判定条件,就没有记录数据个数,此时max=0,对这个用If判断,强制赋值N。

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
long p,num[100001];
int N,count=1,max=0,L=0;
cin>>N>>p;
for(int i=0;i<N;i++) cin>>num[i];
sort(num,num+N);
for(int i=1;i<N;i++){
if(num[L]*p<num[i]){
if(i-L>max) max=i-L;
L++;
}
}
if(max==0) max=N;
cout<<max;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: