Walking Between Houses(Codeforces-1015D)

每次能走n-1步就走n-1步,走不了就前后来回走,最后一次把剩下没走完的走完

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll n,k,s;
    scanf("%lld%lld%lld",&n,&k,&s);
    if(k>s||(n-1)*k<s)
    {
        printf("NO
");
        return 0;
    }
    else
    {
        printf("YES
");
        int flag=1;
        while(s-(n-1)>=k-1&&k>0)
        {
            //printf("%d %d
",s,k);
            s-=(n-1);
            k--;
            if(flag==1)
            {
                printf("%d ",n);
            }
            else
            {
                printf("1 ");
            }
            flag^=1;
        }
        if(s==0)
        {
            printf("
");
            return 0;
        }
        if(flag==0)
        {
            int now=n;
            while(k>1)
            {
                if(flag==0)
                {
                  printf("%d ",n-1);
                  now=n-1;
                }
                else
                {
                  printf("%d ",n);
                  now=n;
                }
                flag^=1;
                k--;
                s--;
            }
            printf("%d
",now-s);
        }
        else
        {
            int now=1;
            while(k>1)
            {
                if(flag==1)
                {
                    printf("%d ",2);
                    now=2;
                }
                else
                {
                    printf("%d ",1);
                    now=1;
                }
                flag^=1;
                k--;
                s--;
            }
            printf("%d
",now+s);
        }
    }
}

还有一种很简单的方式,每次走n-1和s-k+1的较小值

#include <bits/stdc++.h>

using namespace std;

int main(){
    long long n, k, s;
    cin >> n >> k >> s;
    if(s<k || s>(n-1)*k){
        cout << "NO" << endl;
        return 0;
    }
    cout << "YES" << endl;
    int st=1;
    while(k--){
        int rm=min(s-k, n-1);
        s-=rm;
        if(st+rm<=n) st+=rm;
        else st-=rm;
        cout << st << " ";

    }
    cout << endl;
}
原文地址:https://www.cnblogs.com/lishengkangshidatiancai/p/10283857.html