• 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;
    }
    
  • 相关阅读:
    Android开发学习总结(一)——搭建最新版本的Android开发环境
    EntityFramework 6
    EntityFramework优缺点
    十分钟轻松让你认识Entity Framework 7
    SqlServer中的merge操作(转载)
    python打印即时输出的方法
    我的人工智能机器人的游戏
    网络编程的一些知识
    hdu4722 Good Numbers
    hdu4727 The Number Off of FFF
  • 原文地址:https://www.cnblogs.com/zongji/p/12416074.html
Copyright © 2020-2023  润新知