http://codeforces.com/problemset/problem/990/B

题意:

有n个细菌,每个细菌的尺寸为a,现在有以常数k,如果细菌i的尺寸a大于细菌j的尺寸a,并且a<=a+k,那么细菌i就可以吃掉细菌j,问最后可以剩于多少个细菌。

做法:

用map记录相同尺寸细菌的个数,然后用set进行去重排序,从次小的细胞开始比较比该细胞小一点的细胞是否符合要求,如果符合要求,减去被比较的细胞的个数

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <string>
 5 #include <math.h>
 6 #include <algorithm>
 7 #include <vector>
 8 #include <stack>
 9 #include <queue>
10 #include <set>
11 #include <map>
12 #include <sstream>
13 const int INF=0x3f3f3f3f;
14 typedef long long LL;
15 #define Bug cout<<"---------------------"<<endl
16 const int mod=1e9+7;
17 const int maxn=2e5+10;
18 using namespace std;
19
20 map<int,int> mp;
21 set<int> st;
22
23 int main()
24 {
25     int n,k;
26     scanf("%d %d",&n,&k);
27     for(int i=0;i<n;i++)
28     {
29         int t;
30         scanf("%d",&t);
31         mp[t]++;
32         st.insert(t);
33     }
34     int num=n;
35     int pre;
36     for(set<int>::iterator it=st.begin();it!=st.end();it++)
37     {
38         if(it==st.begin())
39         {
40             pre=*it;
41             continue;
42         }
43         if(*it>pre&&*it<=pre+k)
44         {
45             num-=mp[pre];
46         }
47         pre=*it;
48     }
49     printf("%d\n",num);
50     return 0;
51 }
01-10 18:14