PAT乙级 完美数列(25)
来源:互联网 发布:微信淘宝天猫内部优惠 编辑:程序博客网 时间:2024/05/18 01:59
题意:
构造一个完美数列,符合最大值<=最小值*p,参数p会在输入中给出,构造一个符合这个规则的最长序列.
先用sort快排一下整个序列,之后从最小值开始计算,利用最小值*p这个数值在序列中二分查找,时间复杂度nlogn.
#include "iostream"#include "string.h"#include "string"#include "vector"#include "algorithm"using namespace std;//M <= m * pint binary_search(vector<int> array,int n,int value,int sub){int left = 0;int right = n-1;while(left<=right){int middle = left + ((right-left)>>1);if(array[middle]>value && array[middle-1]<value)return middle - sub;else if(array[middle]<value){if(middle == n-1)return middle + 1 - sub;else if(array[middle+1]>value) return middle + 1 - sub;}if(array[middle]>value){right = middle - 1;}else if(array[middle]<value){left = middle + 1;}elsereturn middle + 1 - sub;}return -1;}int main(){int count,p,temp;int i;int max = 0;cin>>count>>p;vector<int> num;/*//testcount = 100000;p = 42;for(i=1;i<=50000;i++){num.push_back(i);}for(i=100000;i>50000;i--){num.push_back(i);}*/for(i=0;i<count;i++){cin>>temp;num.push_back(temp);}sort(num.begin(),num.end());for(i=0;i<count;i++){if(i>0&&num[i] == num[i-1])continue;if(max>count-i-1)break;//test//cout<<"参数:"<<count<<" "<<(num[i]*p)<<" "<<i<<endl; temp = binary_search(num,count,num[i]*p,i);if(temp>max)max = temp;}cout<<max<<endl;return 0;}
0 0
- PAT乙级 完美数列(25)
- PAT-乙级-1030. 完美数列(25)
- PAT乙级.1030. 完美数列(25)
- PAT(乙级)1020 完美数列(25)
- PAT 乙级 1030. 完美数列(25)
- 1030. 完美数列(25)-PAT乙级
- PAT乙级 1030. 完美数列(25)
- PAT乙级1030. 完美数列(25)
- PAT 乙级 1030. 完美数列(25)
- [PAT乙级]1030. 完美数列(25)
- PAT 乙级 1030.完美数列(25)
- pat 乙级 1030. 完美数列(25)
- 1030. 完美数列(25)--PAT乙级
- PAT 乙级 1030. 完美数列(25)
- PAT乙级1030. 完美数列(25)
- PAT乙级1030. 完美数列(25)
- PAT 乙级 1030.完美数列
- [PAT-乙级]1030.完美数列
- LoadRunner调用Oracle存储过程
- 分析Redis架构设计
- Android Studio 使用中遇到的问题
- 【杭电】[2045]不容易系列之(3)——LELE的RPG难题
- A. Magic Spheres
- PAT乙级 完美数列(25)
- Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- 12 可插入数据库
- Android studio 点击按钮跳转到新的Activity
- 16.使用iOS自带的库制作属于自己的二维码图片
- ZZULIOJ 1846 coupon
- CENTOS 7 开启80端口
- AngularJS单元测试——karma+mocha配置及实例
- 【杭电】[2092]整数解cpp