最开始思路错误
原始代码:
#include<iostream>
using namespace std;
#define ll long long
int main()
{
int T;
ll n,m,k;
scanf("%d",&T);
while(T--)
{
scanf("%lld %lld %lld",&n,&m,&k);
ll ans;
ans = (m/(n+1-k) + 1)*n;
printf("%lld\n",min((m+1)*k,ans));
}
return 0;
}
问题就在于我们对(n-k+1)道题的考虑不够充分,题目的公式应该为(k-1)道题*(m/(n+1-k) + 1)再加上剩下(n-k+1)道题,我们只需要复习m+1的时间就能保证一定会再过一道题。
(当然好像有大牛说我这种思路是错的,我只是用我自己的方式理解了而已)
标程:
#include<bits/stdc++.h>
#define LL long long
using namespace std;
int T;
LL n,m,k;
int main()
{
cin>>T;
while(T--)
{
cin>>n>>m>>k;
cout<<(m/(n-k+1)+1)*(k-1)+m+1<<endl;
}
return 0;
}