标签:namespace 区间 col push desc 开始 using inf 接下来
7 3 1 2 3 4 5 -2 6
3
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 {//思路:就是先把n个点进行排序,设置一个变量存第一个点,如果第一个点加上覆盖的都到不了下一个点,说明还得加一个覆盖才能将这两个点覆盖, 5 //注意的是一开始就需要有一个覆盖。 6 priority_queue<int,vector<int>,greater<int> > q;// 从小 到大 排序 使用 优先队列 7 int n,m,data;// n 点的个数, m 覆盖区间长度 8 cin>>n>>m; 9 for(int i=0;i<n;i++){ 10 cin>>data; 11 q.push(data); 12 } 13 int sum=1;//一开始就需要有一个覆盖 ,开始 的点为 覆盖区间的 开始 point 为指向第一个点 14 int point=q.top(); 15 while(!q.empty()){ 16 if(point+m<q.top()){//如果 这个点 加上 覆盖长度 到达不了下一个 点 ,说明 这个两个点之间的间距 过大, 不能覆盖,那么这个两个点分别需要 覆盖 17 sum++;//覆盖个数加一 18 point=q.top();//更新 覆盖区间 开始的点 19 }//如果 这个 点 在 上一个点 + 覆盖 的 这个区间内,那么,可以继续下去 20 q.pop(); 21 } 22 cout<<sum<<endl; 23 return 0; 24 }
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 {//思路:就是先把n个点进行排序,设置一个变量存第一个点,如果第一个点加上覆盖的都到不了下一个点,说明还得加一个覆盖才能将这两个点覆盖,注意的是一开始就需要有一个覆盖。 5 int n,m; 6 int i,j; 7 cin>>n>>m; 8 int a[10002]; 9 for(i=0;i<n;i++){ 10 cin>>a[i]; 11 } 12 sort(a,a+n); 13 int num=1;//一开始就需要有一个覆盖 ,开始 的点为 覆盖区间的 开始 14 int x=a[0]; 15 for(i=1;i<n;i++){ 16 if(a[i]>x+m){//如果 这个点 加上 覆盖到达不了下一个 点 ,说明 这个两个点之间的间距 过大, 不能覆盖,那么这个两个点分别需要 覆盖 17 num++; 18 x=a[i];//更新 覆盖区间 开始的点 19 }//如果 这个 点 在 上一个点 + 覆盖 的 这个区间内,那么,可以继续下去, 20 } 21 cout<<num<<endl; 22 return 0; 23 }
标签:namespace 区间 col push desc 开始 using inf 接下来
原文地址:https://www.cnblogs.com/NirobertEinteson/p/11923449.html