Codeforces-854B

来源:互联网 发布:蓝月传奇光翼升阶数据 编辑:程序博客网 时间:2024/06/03 14:35

链接:

  http://codeforces.com/contest/854/problem/B


题目:

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.

Input

The only line of the input contains two integers: n and k (1 ≤ n ≤ 109, 0 ≤ k ≤ n).

Output

Print the minimum possible and the maximum possible number of apartments good for Maxim.

Example

input
6 3
output
1 3

Note

In the sample test, the number of good apartments could be minimum possible if, for example, apartments with indices 1, 2 and 3 were inhabited. In this case only apartment 4 is good. The maximum possible number could be, for example, if apartments with indices 1, 3 and 5 were inhabited. In this case all other apartments: 2, 4 and 6 are good.


题意:

  有n个屋子,其中k个屋子是有人住的,如果第i个屋子有人住,那么第i-1个屋子和第i+1个屋子就是特殊的,方便起见这里我们将特殊屋子的数量记为ans。然后给你n和k,让你输出最小的ans和最大的ans。


思路:

  如果k和n一样多或者是k为0显然输出0 0,然后就是贪心了,除去特殊情况后,最小全都是1,那么剩下的就是最大值了,当kn3时,最大值就是k×2,当k>n3时,最大值就是nk,化简一下发现可以直接取min(nk,k×2)


实现:

#include <cstdio>#include <algorithm>int main() {    int n, k;    scanf("%d%d",&n,&k);    if(n == k || k == 0) puts("0 0");    else printf("1 %d\n",std::min(n-k, k<<1));}
原创粉丝点击