1030. 完美数列

 题目截图:

 

思路:

  two pointers,先将数列升序排序,然后查找最长完美数列。详解见另一篇博客

 

代码:

 1 /*
 2     1030. 完美数列
 3 */
 4 
 5 #include <stdio.h>
 6 #include <string.h>
 7 #include <math.h>
 8 #include <stdlib.h>
 9 #include <time.h>
10 
11 #define maxn 100002
12 int num[maxn] = {0};
13 
14 int cmp(const void* a, const void* b) {
15     return *(int*)a-*(int*)b;
16 }
17 
18 int main() {
19     int N, p, i, j;
20     scanf("%d %d", &N, &p);
21     for(i=0; i<N; ++i) {
22         scanf("%d", &num[i]);
23     }
24     // 将数组升序排序 
25     qsort(num, N, sizeof(int), cmp);
26     int result = 0;                            // 存储当前求得的最大长度 
27     for(i=0; i<N; ++i) {                    // 序列开始位置 
28         for(j=i+result; j<N; ++j) {            // 使用当前最大长度 
29             if((double)num[j]/num[i]<=p) {
30                 if(j-i+1>result) {            // 长度更长 
31                     result = j-i+1;            // 更新长度 
32                 }
33             } else {                    
34                 break;
35             }
36         }
37     }
38     printf("%d", result);
39 
40     return 0;
41 }

 

posted @ 2018-03-01 10:15  Just_for_Myself  阅读(332)  评论(0编辑  收藏  举报