码迷,mamicode.com
首页 > 编程语言 > 详细

PAT 乙级1030 完美数列(25) C++版

时间:2017-07-30 17:10:45      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:info   namespace   最大   iter   name   using   std   pre   size   

1030. 完美数列(25)

时间限制
300 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CAO, Peng

给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。

现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。

输入格式:

输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109

输出格式:

在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。

输入样例:
10 8
2 3 20 4 5 1 6 7 8 9
输出样例:
8

误区:将第一个作为最小值求结果,这个误区困扰了好久,说起来还是被例子绕晕了

比如说

10 8

1 3 9 11 15 17 18 18 19 20

这个答案就是9,从3开始的 3 9 11 15 17 18 18 19 20

思路:这题使用multiset容器最合适不过了,再求最大数目时,我们可以减少循环次数,比如

10 8
1 3 5 7 9 10 15 20 25 30
在将1作为最小之后,得出最大为4,在9处失败,
下一次将3做最小时,直接从9开始比对,因为第二个数大于等于第一个数(升序)
但是要将num减1,因为最小值右移一位了
从而节省了之前比对的次数

 1 // 1030.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include<iostream>
 6 #include<typeinfo>
 7 #include<set>
 8 
 9 using namespace std;
10 
11 int main()
12 {
13     int N, p, temp,num=0,max_num=0;
14     multiset<int> s;
15 
16     cin >> N >> p;
17 
18     for (int i = 0; i < N; ++i)
19     {
20         cin >> temp;
21 
22         s.insert(temp);
23     }
24 
25     multiset<int>::iterator i, j, t=s.begin(), begin = s.begin(), end = s.end();
26     int k , size = s.size();
27 
28     for (k=1,i = begin; k<=size; ++k,++i)
29     {
30         for (j = t; j != end; ++j)
31         {
32             if (static_cast<double>(*j) / p <= *i)//用除法做,防止越界
33                 ++num;
34             else
35                 break;
36         }
37 
38         t = j;//保留此次失败位置
39 
40         if (num > max_num)
41             max_num = num;
42 
43         --num;//因下一次循环是set里的数向后一位,所以减1
44     }
45 
46     cout << max_num << endl;
47 
48     return 0;
49 }

 

PAT 乙级1030 完美数列(25) C++版

标签:info   namespace   最大   iter   name   using   std   pre   size   

原文地址:http://www.cnblogs.com/cdp1591652208/p/7259430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!