NYOJ-12 喷水装置2(贪心 区间覆盖)
2017-03-12 19:37
519 查看
#include<iostream> #include<algorithm> #include<cstring> #include<cmath> #define MAX 10000+1 using namespace std; struct node{ double left,right; }; bool cmp_left(struct node a, struct node b){ return a.left<b.left; } int main(){ int T; int n,w,h; int count,flag; double circle_x,circle_r,half,now_len,Max; struct node a[MAX]; cin>>T; while(T--){ count=0;//所需装置的个数 flag=1; now_len=0;//已覆盖的长度 cin>>n>>w>>h; half=h/2.000000; for(int i=0;i<n;i++){ double temp; cin>>circle_x>>circle_r; temp=sqrt(circle_r*circle_r-half*half); if(temp>0){ a[i].left=circle_x-temp;//左端点 a[i].right=circle_x+temp;//右端点 } } sort(a,a+n,cmp_left);//左端点从小到大排序 while(now_len<w){ Max=0; for(int i=0;i<n&&a[i].left<=now_len;i++){ if((a[i].right-now_len)>Max) Max=a[i].right-now_len;//用来选出左端点满足条件的线段中,右端点最大的线段 } if(Max==0){ flag=0;//没有左端点符合的 break; } else{ count++; now_len+=Max;//更新覆盖到的区间 } } if(flag==1) cout<<count<<endl; else cout<<"0"<<endl; } return 0; }
相关文章推荐
- NYOJ 12 喷水装置(二)【贪心+区间覆盖】
- nyoj--12--喷水装置(二)(区间覆盖问题+贪心)
- nyoj 12 喷水装置(二)【贪心】+【区间完全覆盖覆盖】
- nyoj--12--喷水装置(二)(区间覆盖问题+贪心)
- nyoj 12 喷水装置(二) 贪心 区间覆盖
- NYOJ 12 喷水装置(2)贪心之区间覆盖问题
- NYOJ 题目12 喷水装置(二) 最小区间覆盖问题
- 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题
- 喷水装置(二)(南阳oj12)(贪心之区间覆盖问题)
- NYOJ——12 喷水装置(二)(区间覆盖)
- 贪心——(区间覆盖问题)——ny_6喷水装置(一)ny_12喷水装置(二)
- 贪心问题:区间覆盖 NYOJ 喷水装置(二)
- nyoj12-喷水装置(二)(贪心)
- nyoj 12 喷水装置(二)(贪心)
- 贪心算法之——喷水装置二(nyoj12)
- NYOJ 12 喷水装置(二)(区间问题)
- NYOJ-----12---喷水装置(二)贪心
- NYOJ 6 喷水装置(一) 贪心算法 之 区间覆盖问题
- NYOJ 12-喷水装置(二)(简单贪心)
- NYOJ 12 喷水装置(二)( 贪心)