Codeforces 854B Maxim Buys an Apartment:貪心

Leohh發表於2017-09-08

題目連結:http://codeforces.com/contest/854/problem/B

題意:

  有n棟房子從1到n排成一排,有k棟房子已經被售出。

  現在你要買一棟“好房子”。

  一棟房子是“好房子”的要求:(1)沒被售出 (2)至少有一棟已售出的房子與他相鄰(有鄰居)

  問你可能的好房子總數量的最小值和最大值。

 

題解:

  貪心。

 

  最小值:

    從第1棟房子開始緊挨著往右共k棟全都售出了,好房子只有一棟就是第k棟樓的右邊一棟。

    特判:k == 0 || n == k:沒有好房子,輸出0。

 

  最大值:

    最完美情況為:每一棟已出售的房子緊挨的左右兩邊都沒有出售,所以都是好房子。

    如果 左右兩邊的好房子 + 售出的房子 <= 總房子數,即k*2<=n-k:那麼存在完美情況,答案為k*2(左右兩邊各一棟)。

    否則 除了售出的k棟房子之外,剩下的都是好房子。答案為n-k。

 

AC Code:

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 using namespace std;
 6 
 7 int n,k;
 8 int maxn,minn;
 9 
10 int main()
11 {
12     cin>>n>>k;
13     if(k*2<=n-k) maxn=k*2;
14     else maxn=n-k;
15     if(n==k || k==0) minn=0;
16     else minn=1;
17     cout<<minn<<" "<<maxn<<endl;
18 }

 

相關文章