1. 程式人生 > >ACM零起點2017-7-28(貪心演算法)

ACM零起點2017-7-28(貪心演算法)

不同屬性不繫結,可以使用貪心法

如果繫結,則不能貪心法解決

Radar Installation


Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d. 

We use Cartesian coordinate system, defining the coasting is the x-axis. The sea side is above x-axis, and the land side below. Given the position of each island in the sea, and given the distance of the coverage of the radar installation, your task is to write a program to find the minimal number of radar installations to cover all the islands. Note that the position of an island is represented by its x-y coordinates. 
 
Figure A Sample Input of Radar Installations


Input The input consists of several test cases. The first line of each case contains two integers n (1<=n<=1000) and d, where n is the number of islands in the sea and d is the distance of coverage of the radar installation. This is followed by n lines each containing two integers representing the coordinate of the position of each island. Then a blank line follows to separate the cases. 


The input is terminated by a line containing pair of zeros 
Output For each test case output one line consisting of the test case number followed by the minimal number of radar installations needed. "-1" installation means no solution for that case. Sample Input
3 2
1 2
-3 1
2 1

1 2
0 2

0 0
Sample Output
Case 1: 2
Case 2: 1

思路:轉換成區間選點問題,用貪心演算法即可解決問題!!!即按照右端點進行對區間從小到大排序,之後詳細看下面的程式碼中的貪心演算法部分!!!

AC程式碼:

被坑了,特浪費一個上午時間!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Then a blank line follows to separate the cases. 被這句話坑慘了,本題目在輸入時候要求多輸入一個空行,如果多寫一個printf("\n");則無法通過,謹記謹記!!!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=1005;

typedef struct
{
    double x;
    double y;
}point;

typedef struct
{
    double x1;
    double x2;
}region;

point p[maxn];
region r[maxn];

bool cmp(region r1,region r2)
{
    return r1.x2<r2.x2;
}

int main()
{
    int n;
    double d;
    int num=0;
    while(scanf("%d%lf",&n,&d)!=EOF)
    {
        if(n==0 && d==0)break;
        bool flag=1;
        for(int i=0;i<n;i++)
        {
            scanf("%lf%lf",&p[i].x,&p[i].y);
            double t=sqrt(d*d-p[i].y*p[i].y);
            r[i].x1=p[i].x-t;
            r[i].x2=p[i].x+t;
            if(p[i].y>d)flag=0;
        }
        printf("Case %d: ",++num);
        if(!flag){printf("-1\n");continue;}
        sort(r,r+n,cmp);
//貪心演算法如下
        double pos=r[0].x2;
        int cnt=1;
        for(int i=1;i<n;i++)
        {
            if(r[i].x1>pos)
            {
                cnt++;
                pos=r[i].x2;
            }
        }
        printf("%d\n",cnt);

    }
    return 0;
}

相關推薦

ACM起點2017-7-28貪心演算法

不同屬性不繫結,可以使用貪心法 如果繫結,則不能貪心法解決 Radar Installation Assume the coasting is an infinite straight line. Land is in one side of coasting

ACM起點2017-7-25sort用過載運算子對結構體排序

上篇文章http://blog.csdn.net/ccnuacmhdu/article/details/76039759 已經用寫cmp函式的方式實現sort對結構體的 排序,下面是通過過載運算子的方式實現sort對結構體進行排序 #include<cstdio&g

杭電oj--1009貪心演算法

 思路分析:先把每個倉庫的價效比資訊計算出來,然後在按價效比大小降序排列(從大到小),先把當前價效比大換掉,最後再把剩下的食物和當前 i 的價效比相乘,由此可AC. #include<iostream> #include<vector> using namesp

分數揹包問題貪心演算法O(n)時間求解

演算法核心:線性時間選擇演算法+貪心 問題介紹:有一個揹包,總限重為c, 還有一系列物品,他們有各自的重量(記為)和各自的利潤,每個物品可以只被拿走一部分。設計一個在O(n)時間內的貪心演算法使得裝入揹包的物品利潤最大化,並且總物品重量不超過。 演算法數學化表示:

1070 Mooncake貪心演算法

1070 Mooncake (25 分) Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types of filling

PAT乙級——1020貪心演算法

題目:月餅 (25 分) 月餅是中國人在中秋佳節時吃的一種傳統食品,不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量,請你計算可以獲得的最大收益是多少。 注意:銷售時允許取出一部分庫存。樣例給出的情形是這樣的:假如我們有 3

補提交卡貪心演算法

描述 小Ho給自己定了一個巨集偉的目標:連續100天每天堅持在hihoCoder上提交一個程式。100天過去了,小Ho檢視自己的提交記錄發現有N天因為貪玩忘記提交了。於是小Ho軟磨硬泡、強忍著小Hi鄙視的眼神從小Hi那裡要來M張"補提交卡"。每張"補提交卡"都可以補回一天的提交,將原本沒有提交程式的一天變

1037. Magic Coupon (25)-PAT甲級真題貪心演算法

1037. Magic Coupon (25)The magic shop in Mars is offering some magic coupons. Each coupon has an in

數字組合問題貪心演算法

設有N個正整數,現在需要你設計一個程式,使他們連線在一起成為最大的數字,例3個整數 12,456,342 很明顯是45634212為最大,4個整數 342,45,7,98顯然為98745342最大 程式要求:輸入整數N 接下來一行輸入N個數字,最後一行輸出最大的那個數字! 思路:拿到這題

HDOJ-1052 Tian Ji -- The Horse Racing貪心演算法

題目描述:就是田忌賽馬,但是要注意兩邊存在馬速度相同的情況。 分析: (看了各路大佬的題解Orz,自我總結一下) 先排序,這裡從快到慢排序; 1.田忌最快馬>王最快馬(貪心,毫無疑問,進行比賽後獲勝) 2.田忌最快馬<王最快馬(同樣的,既然贏不了

C語言——恐怖水母貪心演算法

 恐怖水母 Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 3551, Total Submissions: 6402 Description 比基堡海灘有一個有n個觸手的恐怖水母,蟹老闆希望僱傭一些海綿

演算法學習系列貪心演算法—多處最優服務次序問題

問題描述: 設有n(1≤n≤100)個顧客同時等待一項服務。顧客i需要的服務時間為ti,1≤i≤n,共有s處提供此服務。應如何安排n個顧客的服務次序才能使平均等待時間達到最小。平均等待時間是n個顧客的等待時間(含服務時間)總和除以n。編寫一個貪心演算法,計算n

刪數問題貪心演算法

1.問題描述:問題描述:給定n位正整數a,去掉其中任意k<=n個數字後,剩下的數字按原次序排列組成一個新的正整數,對於給定的n位正整數a和正整數k,設計一個演算法找出剩下數字組成的新數最小的刪數方案。對於給定的正整數a,程式設計計算刪去k個數字後得到的最小數。輸入檔案示

51NOD 1449——砝碼稱重貪心演算法

題目如下: 現在有好多種砝碼,他們的重量是 w0,w1,w2,...  每種各一個。問用這些砝碼能不能表示一個重量為m的東西。 樣例解釋:可以將重物和3放到一個托盤中,9和1放到另外一個托盤中。 Input 單組測試資料。 第一行有兩個整數w,m (2 

4-9 汽車加油問題貪心演算法

問題描述:一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計一個有效演算法,指出應 在哪些加油站停靠加油,使沿途加油次數最少。對於給定的n(n <= 5000)和k(k <= 10

乘坐公交貪心演算法----去哪兒2016研發工程師程式設計題

[程式設計題] 乘坐公交 從小明家所在公交站出發有n路公交到公司,現給出每路公交的停站數(不包括起點和終點),及每次停的時間(一路車在每個站停的時間相同)和發車的間隔,先假定每輛車同時在相對

演算法貪心演算法--刪數問題

刪數問題(需知道的數學定理) 給定n位正整數a,去掉其中任意k≤n 個數字後,剩下的數字按原次序排列組成一個新 的正整數。對於給定的n位正整數a和正整數 k,設計一個演算法找出剩下數字組成的新數最

活動安排貪心演算法

貪心演算法總是做出在當前看來是最好的選擇。但貪心演算法並不從整體最優加以考慮,它所做出的選擇只是在某種意義上的區域性最優選擇。但其最終結果能達到預期目的,或者是最優解的近似解。 活動安排是貪心演算法的

汽車加油問題貪心演算法

1.問題描述:一輛汽車加滿油後可行駛nkm。旅途中有若干加油站。設計一個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。演算法設計:對於給定的n和k個加油站位置,計算最少加油次數。資料輸入:n:表示汽車加滿油後可行駛nkm          k:旅途中有k個加油站

最優裝載貪心演算法

演算法設計例題:最優裝載(貪心) memory limit: 32768KB    time limit: 1000MS accept: 24    submit: 68 Description 有一批集裝箱要裝上一艘載重量為C的輪船。其中集裝箱i的重量為wi。最