首页 > 编程知识 正文

1030 完美数列25PAT乙级真题,完美数列

时间:2023-05-06 07:39:46 阅读:181449 作者:4106

给定一个正整数数列,和正整数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

分析:首先将数列从小到大排序,设当前结果为result = 0,当前最长长度为temp = 0;从i = 0n,j从i + result到n,【因为是为了找最大的result,所以下一次j只要从i的result个后面开始找就行了】每次计算temp若大于result则更新result,最后输出result的值

# include iostream # include algorithm # includevectorusingnamespacestd; int main () { int n; 龙龙p; scanf('%d%lld )、n、p ); vectorintv(n; for(intI=0; i n; I ) cin v[i]; sort(v.Begin )、v.end ); int result=0,temp=0; for(intI=0; i n; I ) for(intj=Iresult; j n; j () if ) v(j )=v (I ) ) p ) { temp=j - i 1; 临时结果=临时(if ); } else { break; } } } cout result; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。