codeforces A. Puzzles 解题报告

题目链接:http://codeforces.com/problemset/problem/337/A

题意:有n个学生,m块puzzles,选出n块puzzles,但是需要满足这n块puzzles里的最大pieces(A)和最小pieces(B)之差最少,即the least possible difference。

      这是一道贪心兼排序的题目,解决方法不难。首先对m块puzzles以非递减的顺序排序(可以保证每个n长度的区间difference最小),接着求出所有长度为n的区间中最大和最小的值之差,即代码中  a[i+n-1] - a[i]  ,最后选出最小的差就是题目的答案。

    

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <stdio.h>
 4 #include <string.h>
 5 using namespace std;
 6 
 7 const int maxn = 1000+5;
 8 int a[maxn];
 9 
10 int main()
11 {
12     int i, n, m, min;
13     while (cin >> n >> m)
14     {
15         for (i = 0; i < m; i++)
16         {
17             scanf("%d", &a[i]);
18         }
19         sort(a, a+m);      
20     //  cout << endl;
21     //  for (i = 0; i < m; i++)
22     //      cout << a[i] << " ";
23     //  cout << endl;
24         min = maxn;
25         for (i = 0; i+n-1 < m; i++)
26         {
27     //      cout << a[i+n-1] - a[i] << endl;
28             if (min > a[i+n-1] - a[i])    // 求出所有n区间的最大值和最小值之差
29                 min = a[i+n-1] - a[i];    // 并同时得出最终的最小值
30         }
31         printf("%d\n", min);
32     }
33     return 0;
34 }

     

 

posted @ 2013-08-17 11:08  windysai  阅读(309)  评论(0编辑  收藏  举报