Codeforces Round #120 (Div. 2) A : Vasya and the Bus

問題概要

バスに子供がM人、大人がN人乗っている。子供は料金を支払うことができない。大人は自分のぶんだけか、子供の分を支払うことができる。ただし、子供の分を払うときは1人分料金が免除される。支払われる料金の最大値と最小値を求める問題。支払うことができないのであれば指摘せよ。

解法

大人一人だけに押し付けるときとなるべく多くの大人に押し付けるときを考えれば良い。コーナーケースに注意。

acceptされたコード

#include <cstdio>
#include <algorithm>
using namespace std;

int N, M;

void init(){
	scanf("%d%d", &N, &M);
}

void solve(){
	if(N == 0 && M == 0){
		puts("0 0");
		return ;
	}
	if(N == 0){
		puts("Impossible");
		return ;
	}

	printf("%d %d\n", N + max(0, M-N) ,N + max(0, M-1));
}

int main(){
	init();
	solve();

	return 0;
}