题解 | #过山车#
过山车
https://ac.nowcoder.com/acm/problem/22237
思路:审题要清晰
先排除特殊情况:
(1)如果 k == 0,即过山车上一个人也没有,由于牛牛必须坐在前面有人或者后面有人的空位置,此时过山车上没有符合牛牛要求的位置,故最少和最多符合他要求的位置都为 0 ;
(2)如果 k == n,即过山车已经坐满,此时已经没有位置了,故最少和最多符合他要求的位置都为 0;
再看一般情况:由于牛牛必须坐在前面有人或者后面有人的空位置,故最少符合他要求的位置为 1 ,主要考虑最多符合他要求的位置,我们可以三个位置分为一组,比如 n = 6,k = 2,最多的情况为 010 010,此时牛牛有 4 个位置可以选择;再比如 n = 8, k = 2,最多的情况为 010 010 00,此时牛牛有 4 个位置可以选择;再比如 n = 4,k = 2,最多的情况为 010 1,此时牛牛有 2 个位置可以选择;由此,当 n >= k3 时,maxn = 2k;否则,maxn = n-k;
#include<iostream>
using namespace std;
int main(){
long long n,k,min=0,max=0;
cin>>n>>k;
if(n==k||k==0);
else{
min=1;
if(n>=3*k){
max=k*2;
}
else{
max=n-k;
}
}
cout<<min<<" "<<max<<endl;
return 0;
}