hdu 1536 S-Nim sg函数

 最入门的sg,水题

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int c[102];
int sg[10005];
int k,n;
int get_sg(int now)
{
    if(~sg[now])return sg[now];
    int vis[102],i;
    memset(vis,0,sizeof(vis));
    for(i=0;i<k;i++)
    {
        if(now<c[i])continue;
        vis[get_sg(now-c[i])]=1;
    }
    for(i=0;vis[i]==1;i++);
    return sg[now]=i;
}
int main()
{
    while(~scanf("%d",&k)&&k)
    {
        int i,m;
        for(i=0;i<k;i++)scanf("%d",&c[i]);
        scanf("%d",&m);
        memset(sg,-1,sizeof(sg));
        sg[0]=0;
        int ans=0,t;
        while(m--)
        {
            ans=0;
            scanf("%d",&n);
            for(i=0;i<n;i++)
            {
                scanf("%d",&t);
                ans^=get_sg(t);
            }
            putchar(ans?'W':'L');
        }
        puts("");
    }
}
时间: 2024-09-20 05:16:22

hdu 1536 S-Nim sg函数的相关文章

HDU 1536 SG函数

这题也是一道sg函数的模板题,没有任何变形,明确了允许移动的数目范围后可以用SG函数直接解决,记住SG要将S数组中的数从小到大排序. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int k,num[120],f[10002]; int mex1(int p) { int i,t; bool g[101]= {0}

HDU 1848 SG函数

这题运用博弈中的SG函数解决的,感觉初级博弈题用这个很好用但是难一些的还是不会求SG值,就是SG的模板题. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int k,fib[1000],f[10001]; int mex1(int p) { int i,t; bool g[101]= {0}; for(i=0; i

uva 1378 - A Funny Stone Game sg函数

    07年论文的第一个例题,看了2天都没看懂,那句把每一颗石子看作是一堆石子,如果它是第p堆中的石子,把么它所代表的这堆石子的个数为n-1-p,晚上看电影突然想明白了,意思是如果第p堆一开始为t,那么就可以看做t个数目为n-1-p的石子.一切问题迎刃而解     写了个O(n^3)的算法,但感觉不用枚举,还能有优化 /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,plea

hdu 1848 Fibonacci again and again

这是尼姆博弈的变型; 还是博弈,但是这次要用Sg函数最后异或等于0后手赢 反之,先手赢 #include <iostream> #include <cstring> #include <cstdio> using namespace std; int f[100]={1,2,3,5}; int e[1005]={0,1,2,3}; int b[16]; void Init() { for(int i=3; f[i-1]<=1000; i++) f[i] = f[i

《程序设计解题策略》—— 导读

前言 策略即计策和谋略,指一种总体的行为方针和行事方法,即一种可以实现目标的方案集合,而非纠缠于细枝末节的雕虫小技.程序设计的解题策略指的是编程解题过程中所采取的一种基本方法,是对解题方法的综合性.智能性和个性化的认识.尤其是当面对非标准.非模式化的问题时,就更需要发挥创造性思维,求索应对策略和解题艺术.正如古人所言"术谋之人以思谟为度,故能成策畧之奇,而不识遵法之良". 对于程序设计竞赛选手的培养,教师应注重在两个方面系统地训练选手:①程序设计竞赛的知识体系:②程序设计的解题策略.

HDU 1286 找新朋友(欧拉函数模板)

HDU 1286 找新朋友:http://acm.hdu.edu.cn/showproblem.php?pid=1286 题意:中文题. 思路:欧拉函数的纯模板题,没什么好说的,主要是理解欧拉函数的意义. 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等. 例如φ(8)=4,因为1,3,5,7均和8互质.   ----by度娘. 更多精彩内容:http://www.bia

HDU 3501 Calculation 2:欧拉函数的应用

HDU 3501 Calculation 2:http://acm.hdu.edu.cn/showproblem.php?pid=3501 大意:求1~n之间与n不互质的数的总和. 思路:欧拉函数的应用:先用欧拉函数求出与n互质的总数m,计算m个数的总和,用n的总和减去m的总和就是想要的结果. 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/ #include <stdio.h> #define LL _

hdu 1695 GCD【欧拉函数+容斥原理】

GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6253    Accepted Submission(s): 2291 Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y

HDU 2438 求函数+三分

题意:给出x,y,l,d,问汽车能否拐过去. 只需要求汽车下沿抵住下面墙壁时汽车初始左下角点P横坐标最大值就行.f(θ)=l*cos(θ)-(x*cos(θ)-d)/sin(θ).f(θ)在区间(0,π/2)上先增后减,三分最大值即可 #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace