题目描述

羊村的供水系统搞砸了,隔壁牛村捐赠的的矿泉水刚刚送达,村长让喜羊羊们排队领水,已知有n个羊村村民正在排队取水,懒羊羊不知道他在队伍的具体哪个位置,但他知道有不少于a个人在他前面,有不多于b个人在他后面,你能帮忙计算一下懒羊羊有多少个可能的位置吗?

输入描述:

输入一行包含三个整数n,a,b

0<= a,b < n <= 100

输出描述:

输出一行包含一个整数表示可能的位置数

题解

这道题主要是分为两部分,第一部分就是前面的人,第二部分就是后面的人,我们分别进行讨论

前面不少于a个人,也就是说前面至少有a个人在他前面,后面有不多于b个人,说明在他后面最多只有b个人。

可以先进行简单的模拟,假如一共有5个人,前面至少1个,后面不多于2个,前面除去一个,后面还有四个人,但是后面的人最多只有两个,所以懒洋洋只能在最后三个位置上面的其中一个,所以就有三种。

另外一种就是,假如有5个人,前面至少有2个人,后面不多余3个人,先从后面看,因为后面最多只有3个人,把范围给控制住了,后面除去三个人,前面刚好两个人,此时,懒洋洋就在后面三个人之中的一个位置。

从上面我们可以清楚看到,控制位置的主体部分是后面的人,如果全部位置减去前面最少的人比后面最多人的值要大,说明只要满足后面的条件就行了。因此最后的位置数应该比最后面人数多1。如果全部位置减去前面最少的人比后面最多人的值要小于等于,说明,满足前面之后,后面是满足不了最大值的,所以最后位置的数应该小1.

所以,最后的代码是:

using namespace std;
int main(){
    int n,a,b;
    cin>>n>>a>>b;
    if (n-a>b) cout<<b+1;
    else cout<<b;
    return 0;
}