Hrbust的校车 | ||||||
| ||||||
Description | ||||||
乘坐Hrbust的校车是要买票的,乘客分为两种,成人和儿童。 每个成人都可以带领数量不限的儿童,此时,在他管理的儿童中将有一个儿童免票。每个成人也可以不带领儿童。而且,在没有成人的带领下,儿童是不能在Hrbust乘车的。 已知一辆车上的成人和儿童的数量,请计算这些人最少买了几张票,最多买了几张票。 | ||||||
Input | ||||||
输入包含多组测试数据。 对于每组测试数据: 第1行,包含三个整数n, m (0 ≤ n, m ≤ 105) 分别表示成人和儿童的数量。 处理到文件结束 | ||||||
Output | ||||||
对于每组测试数据: 如果情况可能出现,则输出这些人最少买了几张票,最多买了几张票。 否则输出Impossible | ||||||
Sample Input | ||||||
1 2 0 100 | ||||||
Sample Output | ||||||
2 2 Impossible | ||||||
Author | ||||||
齐达拉图@HRBUST |
思路:
最少买票的情况:当且仅当一个大人带一个小孩的时候,买票数最少,谨记,不要因为计算问题,输出了负数。
最多买票情况:当且仅当一个大人带所有小孩的时候,买票数最多,同样,注意输出负数的情况。
不可能的情况:没有大人只有小孩的情况。
坑点:当没有大人的时候,也没有小孩的情况,不能输出Impossible,应该输出的是0 0
AC代码:
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
{
printf("0 0\n");
continue;
}
if(n==0)
{
printf("Impossible\n");
}
else
{
int zuishao;
int zuiduo;
if(m-1>=0)
zuiduo=n+m-1;
else
zuiduo=n;
if(n>=m)
zuishao=n;
else
zuishao=m;
printf("%d %d\n",zuishao,zuiduo);
}
}
}