PAT 1020完美数列(25)(贪心暴力)

来源:互联网 发布:网络简介阅读题答案 编辑:程序博客网 时间:2024/06/05 17:44
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。

暴力查找的时候注意,优化,即在循环外层的时候,至少可以少跑ma个间隔,因为有之前的状态满足,只需找更大的。
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<set>#include<map>#include<queue>#define inf 0x3f3f3f3f#define LL long longusing namespace std;LL  arr[100010];int main(){    LL n,m,i,j,k;    while(~scanf("%lld%lld",&n,&m)){        for(i = 0;i < n;++  i)            scanf("%lld",&arr[i]);        sort(arr,arr+n);        LL ma = 0,po = 0,num;        for(i = 0;i < n;++ i){            for(j = i+1+ma;j < n;++ j){                if(arr[i]*m >= arr[j]){                    if(ma < (j-i+1))                        ma = j - i+1;                }                else break;            }        }        printf("%lld\n",ma);    }    return 0;}


0 0
原创粉丝点击