我百愁莫展之时,看了题解,发现思路跟我的基本一样,除了long long。
要long long!
要long long!
要long long!
重要的事情说三次。
首先的n==k||k==0,读者自证不难。
接下来是最小的情况:
由于n>=k
经过上面的筛选,下面肯定有n<k了
接着我们进行模拟,到底一个人的旁边最多能坐多少个人
首先从k==1开始,010,最多2个
k==2,010010,最多4个
......
k=t,最多2t个
然后,我们就需要考虑了,在最多能坐2
k的情况下,必须有3k<=n
然后当3
k>n时,

  • 由于过山车的位置不够,且此时本应该都坐满了人,那我们只需要把不够的过山车的位置去掉,这部分位置为(3k-n)个
    然后2
    k-(3*k-n)=n-k,即为所得
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    int main()
    {
    long long n,k;
    cin>>n>>k;
    if(n==k||k==0)
    cout<<"0 0"<<endl;
    else if(3*k<=n)
    cout<<"1 "<<2*k<<endl;
    else
    cout<<"1 "<<n-k<<endl;
    return 0;
    }