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