zoukankan      html  css  js  c++  java
  • PAT 1030 完美数列

    题目:

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

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

    思路:这题就类似滑块的方式来组合排列。确定数列的开头后,滑动改变数列的结尾,同时判断head和tail是否符合完美数列,符合就

       更新step的值,step=j-i+1是head和tail之间的距离,因为中间的数字组成的完美数列不可能是最多的所以下一次循环要选择性的跳过。

      注意:在我调试的时候,第四个测试点运行超时是因为测试数据太大,所以得加一个break跳过不必要的循环

         第五个测试点是因为我的p的数据范围太小,大数据会让p的值溢出,所以改用long long。

    代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main()
    {
    	int N = 0, step = 0;
    	long long p = 0;
    	cin >> N >> p;
    	int *arry=new int[N];
    	if (N > 100000)return 0;
    	for (int i = 0; i < N; i++)cin >> arry[i];
    	sort(arry,arry+N);
    	for (int i = 0; i < N; i++)
    	{
    		for (int j = i + step; j < N; j++)
    		{
    			if (arry[j] <= arry[i] * p)step = j - i + 1;
    			else break;
    		}
    	
    	}
    	cout << step << endl;
    	return 0;
    }
    
  • 相关阅读:
    K-lord #1
    P1220 关路灯 (区间DP)
    P1136 迎接仪式 (动态规划)
    P1063 能量项链 (区间DP)
    444 D. Ratings and Reality Shows
    P1896 [SCOI2005]互不侵犯King
    P1841 [JSOI2007]重要的城市
    P1134 阶乘问题
    P1414 又是毕业季II
    P1450 [HAOI2008]硬币购物
  • 原文地址:https://www.cnblogs.com/zongji/p/12416074.html
Copyright © 2011-2022 走看看