题目描述
羊村的供水系统搞砸了,隔壁牛村捐赠的的矿泉水刚刚送达,村长让喜羊羊们排队领水,已知有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;
}