K 배 동적 뺄셈 게임

2237 단어 게임.
제목: http://acm.hdu.edu.cn/showproblem.php?pid=2580
 
#include <iostream>

#include <string.h>

#include <stdio.h>



using namespace std;

const int N = 2000005;



int a[N],b[N];



int main()

{

    int T,tt=1;

    int n,k;

    scanf("%d",&T);

    while(T--)

    {

        scanf("%d%d",&n,&k);

        a[0] = b[0] = 1;

        int i = 0;

        int j = 0;

        while(a[i] < n)

        {

            i++;

            a[i] = b[i-1] + 1;

            while(a[j+1] * k < a[i]) j++;

            if(a[j] * k < a[i]) b[i] = a[i] + b[j];

            else b[i] = a[i];

        }

        printf("Case %d: ",tt++);

        if(a[i] == n) puts("lose");

        else

        {

            int ans = 0;

            while(n)

            {

                if(n >= a[i])

                {

                    n -= a[i];

                    ans = a[i];

                }

                i--;

            }

            printf("%d
",ans); } } return 0; }

 
제목: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3599
 
#include <iostream>

#include <string.h>

#include <stdio.h>



using namespace std;

typedef long long LL;

const LL N = 3000005;



LL a[N],b[N];



int main()

{

    LL T;

    LL n,k;

    scanf("%lld",&T);

    while(T--)

    {

        scanf("%lld%lld",&k,&n);

        a[0] = b[0] = 1;

        LL i = 0;

        LL j = 0;

        while(a[i] < n)

        {

            i++;

            a[i] = b[i-1] + 1;

            while(a[j+1] * k < a[i]) j++;

            if(a[j] * k < a[i]) b[i] = a[i] + b[j];

            else b[i] = a[i];

        }

        LL ans = 0;

        if(a[i] == n) ans = n - i - 1;

        else ans = n - i;

        printf("%lld
",ans); } return 0; }

 

좋은 웹페이지 즐겨찾기