poj3069Saruman's Army

來源:互聯網
上載者:User

標籤:for   io   代碼   amp   res   ar   

題意大概是這樣,給你一堆數,每個數代表一個點的位置,可以理解成在一個
一維座標裡的一些點,每個點都有一個數字代表。
還給了你一個數代表半徑。
給你一個規則,當你選擇某個點標記的時候,以它為中心,半徑所能掃到的地區
內,所有點都會被標記。
現在要把所有點標記,問你最少選擇幾次就能夠標記完。
我的做法是貪心,從最左邊開始,數一個點出來,這個點剛好超過以最左邊那個點
為中心能夠掃到的地區,然後再以這個點為中心,再數一個點出來,這個點剛好
超過以這個為中心的點所能掃到的地區,這個時候選擇標記這個為中心的點,以此類推,
當掃到最後一個點的時候,此時選擇標記的點的數目就是最小數目。
我的AC代碼如下:

#include<cstdio>#include<algorithm>using namespace std;int r,num,dot[1010];bool cmp(int a,int b){return a<b;}bool init(){int i;scanf("%d%d",&r,&num);if(r==num&&r==-1)return 0;for(i=0;i<num;i++)scanf("%d",&dot[i]);sort(dot,dot+num,cmp);return 1;}void result(){int i,sum=0,s=0;while(s<num){for(i=s;i<num&&dot[i]<=dot[s]+r;i++);s=i-1;for(i=s;i<num&&dot[i]<=dot[s]+r;i++);s=i;sum++;}printf("%d\n",sum);}int main(){while(init())result();}


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.