POJ 1328 Radar Installation 貪心 區間選點
阿新 • • 發佈:2020-11-20
區間選點,貪心
計算區間後找到最少的點使得每個區間內都有點
//很多要寫double的地方寫了int #include<iostream> #include<algorithm> #include<cmath> using namespace std; int n, d; int cnt = 1; typedef struct { double s, e; //以島嶼為中心的區間 }pos; pos p[1000]; bool cmp(pos a, pos b) //以右端點排序 { if(a.e == b.e) return a.s < b.s; else return a.e < b.e; } int solve() { int ans = 1; int i = 1; int index = 0; //雷達在index區間的右端點 while(i < n) //下一個區間的左端點不在裡面 ans++ { if(p[index].e < p[i].s) { ans++; index = i; } i++; } return ans; } int main() { while(~scanf("%d %d", &n, &d)) { if(n == 0) break; bool flag = true; int x, y; for(int i = 0; i < n; i++) { scanf("%d %d", &x, &y); double dis = sqrt(double(d*d-y*y)); if(y > d) flag = false; p[i].s = x-dis; p[i].e = x+dis; } if(flag) { sort(p, p+n, cmp); printf("Case %d: ", cnt++); printf("%d\n", solve()); } else printf("Case %d: -1\n", cnt++); //一直沒發現這邊錯了,原本直接輸出的-1 } system("pause"); return 0; }