关闭

K倍动态减法游戏

1917人阅读 评论(0) 收藏 举报
分类:

题目: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\n",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\n",ans);
    }
    return 0;
}



0
1
查看评论

HDU A simple stone game [K倍动态减法游戏]

转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 神牛曹钦翔的论文:...
  • ACM_cxlove
  • ACM_cxlove
  • 2012-08-06 19:28
  • 4677

斐波那契博弈-K倍动态减法游戏(Poj-3922 A simple stone game)

斐波那契博弈(Fibonacci Nim): http://blog.csdn.net/dgq8211/article/details/7602807 http://blog.csdn.net/tbl_123/article/details/24033245   博弈,k倍动态...
  • u011567017
  • u011567017
  • 2016-04-21 21:55
  • 337

K倍动态减法游戏

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2580 #include #include #include using namespace std; const int N = 2000005; int a[N],b[N]; int...
  • ACdreamers
  • ACdreamers
  • 2013-12-02 21:05
  • 1917

[K倍动态减法问题] HDU 2486 & HDU2580 & POJ3922 a simple stone game

这就是斐波那契博弈的加强版 对于某些特定的KK 我们有结论 K=1K=1 后手必胜当且仅当nn是22的次幂 先手的策略是取lowbit(n)lowbit(n) K=2K=2 后手必胜当且仅当nn是斐波那契数 先手的策略是取nn的斐波那契拆分中最小的数 这道题 我们仿照斐波那契博弈的构造方法 构...
  • u014609452
  • u014609452
  • 2017-03-02 20:38
  • 243

Poj-3922 A simple stone game(博弈,k倍动态减法)

Poj-3922 A simple stone game 博弈,k倍动态减法详解
  • u012628310
  • u012628310
  • 2014-05-02 21:12
  • 1774

hdu2486 A simple stone game K倍动态减法游戏

巨坑的一道博弈...思路太奇葩了...理解能力强的推荐去看2009年国家集训队论文  曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问题》里面给有详细的证明过程... 先说一下题意,N个石子,第一次可以去1---N-1中任意数量的,之后每次最少取1个,最多取k*上次去的石子数,取走最...
  • yanglei040
  • yanglei040
  • 2014-02-24 02:35
  • 660

(k倍动态减法游戏)zoj 3599 hdu 2486

A simple stone game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 359&#...
  • caduca
  • caduca
  • 2014-10-30 16:56
  • 794

ZOJ-3599 Game (博弈 K倍动态减法)

Game Time Limit: 3 Seconds      Memory Limit: 65536 KB Alice and Bod decide to play a new stone game. At the ...
  • u012628310
  • u012628310
  • 2014-05-03 17:26
  • 757

K倍动态减法(hdu 2486)

题意:两人取一堆石子,石子有n个。 先手第一次不能全部取完但是至少取一个。之后每人取的个数不能超过另一个人上一次取的数的K倍。拿到最后一颗石子的赢。先手是否有必胜策略?若有,先手第一步最少取几个? 先来篇论文 再来篇博客(感觉人家讲的比我好,我就不献丑了)#include<cstdio&g...
  • ACMer_ZP
  • ACMer_ZP
  • 2017-03-13 11:21
  • 145

K倍动态减法游戏 HDU 2486&&POJ 3922

题目链接:http://poj.org/problem?id=3922                   http:/...
  • u012358934
  • u012358934
  • 2014-07-04 17:52
  • 1221
    个人资料
    • 访问:2543539次
    • 积分:24848
    • 等级:
    • 排名:第307名
    • 原创:472篇
    • 转载:42篇
    • 译文:0篇
    • 评论:516条
    最新评论