我百愁莫展之时,看了题解,发现思路跟我的基本一样,除了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个
然后,我们就需要考虑了,在最多能坐2k的情况下,必须有3k<=n
然后当3k>n时,
- 由于过山车的位置不够,且此时本应该都坐满了人,那我们只需要把不够的过山车的位置去掉,这部分位置为(3k-n)个
然后2k-(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; }