题目描述:
Maxim wants to buy an apartment in a new house at Line Avenue of Metropolis. The house has n apartments that are numbered from 1 to n and are arranged in a row. Two apartments are adjacent if their indices differ by 1. Some of the apartments can already be inhabited, others are available for sale.
Maxim often visits his neighbors, so apartment is good for him if it is available for sale and there is at least one already inhabited apartment adjacent to it. Maxim knows that there are exactly k already inhabited apartments, but he doesn’t know their indices yet.
Find out what could be the minimum possible and the maximum possible number of apartments that are good for Maxim.
输入描述:
The only line of the input contains two integers: n and k (1 ≤ n ≤ 109, 0 ≤ k ≤ n).
输出描述:
Print the minimum possible and the maximum possible number of apartments good for Maxim.
输入:
6 3
输出:
1 3
题意:
Maxim想在一个公寓里买一个新房子,n 为公寓里房子的总数,k 为公寓里有人居住的房子总数,当Maxim买的房子旁边有人居住时这个房子才算是好的,输出Maxim最少和最多能有多少个好的房子可以挑选。
题解:
每三个房子中,只要中间那个房子有人居住就可以得到两个好的房子。注意:当n = k和 k = 0时特殊。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int n,k;
while(scanf("%d%d",&n,&k)!=EOF){
if(k == n || k == 0) printf("0 0\n");
else{
int m = n / 3;
if(k <= m){
printf("1 %d\n",2 * k);
}
else printf("1 %d\n",n - k);
}
}
return 0;
}