由于有多组测试数组,直接模拟的话会超时,所以需要推出一个公式
首先模拟一下带入的过程
那么k次带入人数 a+(k-1)*(m-1)=s (1<=a<=m)
令 s-1=(a-1)+(k-1)*(m-1)
- 如果a==m,(s-1)/(m-1)=k次 由于最后一次不返回,只需要2k-1时间
- 如果a!=m, (s-1)/(m-1)=k-1次 由于最后一次不返回 ,此时只需要出去外面一次,即2k+1时间
综上所述,就可以处理能回来的情况了
此时还有不能回来的情况,也就是m=1的情况,特判一下就可以了
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
if(m==1)
{
if(n==1) cout<<1<<'\n';
else cout<<"-1"<<'\n';
continue;
}
int a=(n-1)%(m-1);
if(a==0) cout<<2*((n-1)/(m-1))-1<<'\n';
else cout<<2*((n-1)/(m-1)+1)-1<<'\n';
}
return 0;
}