2018 ACM-ICPC 沈阳站 Problem K. Let the Flames Begin 具体数学

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fanbaobao829/article/details/83384773
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f(ll n,ll m,ll k)
{
    if(m*k<=n)
        return m*k;
    if(k>n)
        return (f(n-1,m-1,k)+(k-1)%n)%n+1;
    ll tp=f(n-n/k,m-n/k,k);
    if(tp<=n%k)
        return n/k*k+tp;
    else
        return ((tp-n%k-1)/(k-1)+tp+n/k*k-1)%n+1;
}
int main()
{
    ll n,m,k,t,cas=0;
    scanf("%lld",&t);
    while(t--&&scanf("%lld%lld%lld",&n,&m,&k)!=EOF)
        printf("Case #%lld: %lld\n",++cas,f(n,m,k));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/fanbaobao829/article/details/83384773