PAT Basic Level 1030 完美数列 (25 分)
2019-01-21 20:25
232 查看
题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805291311284224
本人6分代码:
[code]#include <iostream> #include <algorithm> #include <cstdio> #include <string> #include <vector> using namespace std; int v[100010]; int m[10001][10001]; int main() { int N; int p; cin >> N >> p; for (int i = 0; i < N; i++) cin >> v[i]; int max_len = 0; sort(v, v + N); for(int i=0;i<N;i++) for (int j = i+1; j < N; j++) { m[i][j] = v[j] / v[i]; int len = j - i+1; if (len>max_len&&(m[i][j] <= p)) { max_len = len; } } cout << max_len << endl;
AC代码:
[code]#include<iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cctype> using namespace std; const int maxn=100010; int n,p,a[maxn]; //二分查找可以用upper_bound代替 int binarySearch(int i,long long x){ if(a[n-1]<=x) return n;//如果所有数不大于x,返回n int l=i+1,r=n-1,mid;//在[i+1,n-1]查找 while(l<r){ mid=(l+r)/2; if(a[mid]<=x){ l=mid+1; } else{ r=mid; } } return l;//返回l或者r均可 } int main(){ scanf("%d%d",&n,&p); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } sort(a,a+n);//递增排序 int ans=1;//最大长度,初值为1 for(int i=0;i<n;i++){ //在a[i+1]~a[n-1]中查找第一个超过a[i]*p的数,返回其位置给j int j=binarySearch(i,(long long)a[i]*p); // int j=upper_bound(a+i+1,a+n,(long long)a[i]*p)-a; ans=max(ans,j-i); } printf("%d\n",ans);//输出结果 return 0; }
相关文章推荐
- PAT(basic level) 1030 完美数列(25)
- PAT(Basic Level) 完美数列(25)
- PAT (Basic Level) Practise (中文)1030. 完美数列(25)
- PAT BASIC LEVEL 1030. 完美数列(25)
- PAT (Basic Level) Practise (中文) 1030. 完美数列(25)
- PAT(Basic Level)_1030_完美数列
- PAT (Basic Level) Practise (中文)1030. 完美数列(25)
- PAT (Basic Level) Practise (中文)-1030. 完美数列(25)
- Pat(Basic Level)Practice--1030(完美数列)
- PAT(Python)-1030:完美数列(25)
- PAT 1030 完美数列(25)
- PAT (Ba 4000 sic Level) Practise (中文)1030. 完美数列(25)
- PAT1030完美数列(25)
- PAT乙级(Basic Level)真题 >完美数列
- PAT (Basic Level)1030. 完美数列
- PAT1030 完美数列(25)
- PAT Basic 1030. 完美数列(25)(C语言实现)
- PAT (Basic Level) Practise:1030. 完美数列
- PAT 1030 完美数列(25)
- 【再思考】PATBasic——1030. 完美数列(25)