代码中的n/2以及n/3的由来:当k=n/2的临界情况时,代码注释部分已经做了详细的说明;当k远小于n时,对k进行每个人隔两个空的排列,这样max=1+(k-1)*2+1=2k,临界情况,max+k=n,则k=n/3 ;继而当n/3<k<n/2时,排列时要注意必然会有两个人之间只隔一个空位,则 max=1+(k-1)*2+1-1=2k-1;最后确定不管n为奇数还是偶数都无误
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
int min=0,max=0; //结果初始化
if(k>=n || k==0){ //如果超员或者根本没人直接返回 0 0
cout<<min<<" "<<max<<endl;
}else{
min = 1; //k<n min必然为1
if(k>=n/2) max=n-k; //当已经上车人数超过一半时,对已经上车的人均匀分配,剩下的空位必然都可以坐
else if(k<n/2 && k>n/3) max=2*k-1;
else max=2*k;
cout<<min<<" "<<max;
}
}