SG函数题目
思路:
把整个游戏看成三个子游戏,然后求游戏的和
关键理解g(x) = mex(g(y), y€f(x)) , f(x)表示由x点可达的点,
import java.util.Arrays;
import java.util.Scanner; public class Main {
public int[] fib = new int[20];
public boolean[] vt = new boolean[20];
public static int[] g = new int[1002]; public void init() {
fib[1] = 1; fib[2] = 2;
for (int i = 3; i < 20; ++i) {
fib[i] = fib[i - 1] + fib[i - 2];
}
}
public void dfsSG() {
//首先找出确定的点一般为0点
g[0] = 0; g[1] = 1;
for (int i = 2; i <= 1000; ++i) {
Arrays.fill(vt, false);
//然后枚举g(y)标记, g(x) = mex(g(y), y 属于 F(x));
for (int j = 1; fib[j] <= i; ++j) {
vt[g[i - fib[j]]] = true;
}
//mex()过程
for (int j = 0; j <= 1000; ++j) {
if (!vt[j]) {
g[i] = j;
break;
}
}
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Main main = new Main();
main.init(); main.dfsSG();
int m, n, p;
while (in.hasNext()) {
m = in.nextInt();
n = in.nextInt();
p = in.nextInt();
if (m == 0 && n == 0 && p == 0) break;
if ((g[m] ^ g[n] ^ g[p]) != 0) {
System.out.println("Fibo");
} else {
System.out.println("Nacci");
}
}
}
}
思路:同上。。只是每一步的策略不同罢了。。
import java.util.Arrays;
import java.util.Scanner; public class Main {
public static Scanner in = new Scanner(System.in);
public static int[] s;
public static int[] g = new int[10001];
/*
* 注意vt的取值,我们只要的最大之只要是s的大小 + 1即可。
* 因为我们最后往后走k不,如果这k个得到的是0-k那么我们的取值就是k+1
* 这是最大的了
*/
public static boolean[] vt = new boolean[107]; public static int k;
public static void dfsSG() {
g[0] = 0;
for (int i = 1; i <= 10000; ++i) {
Arrays.fill(vt, false);
for (int j = 0; j < k; ++j) {
if (i - s[j] < 0) break;
vt[g[i - s[j]]] = true;
}
for (int j = 0; j <= 107; ++j) {
if (!vt[j]) {
g[i] = j;
break;
}
}
}
}
public static void main(String[] args) { while (in.hasNext()) {
k = in.nextInt();
if (k == 0) break;
s = new int[k];
for (int i = 0; i < k; ++i) s[i] = in.nextInt();
Arrays.sort(s);
dfsSG();
int m = in.nextInt();
while ((m--) != 0) {
int sz = in.nextInt();
int ans = 0;
for (int i = 0; i < sz; ++i) {
int idx = in.nextInt();
ans ^= g[idx];
}
if (ans == 0) {
System.out.print("L");
} else {
System.out.print("W");
}
}
System.out.println();
}
}
}
SG函数题目的更多相关文章
- BZOJ1188 [HNOI2007]分裂游戏(SG函数)
传送门 拿到这道题就知道是典型的博弈论,但是却不知道怎么设计它的SG函数.看了解析一类组合游戏这篇论文之后才知道这道题应该怎么做. 这道题需要奇特的模型转换.即把每一个石子当做一堆石子,且原来在第i堆 ...
- sg函数与博弈论
这个标题是不是看起来很厉害呢... 我们首先来看一个最简单的游戏.比如我现在有一堆石子,有p个,每次可以取走若干个(不能不取),不能取的人就输了. 现在假设有两个人要玩这个游戏,一个人先手,一个人后手 ...
- hdu1536&&hdu3023 SG函数模板及其运用
S-Nim Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status ...
- HDU1848 Fibonacci again and again SG函数
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- SG函数 专题练习
[hdu1536][poj2960]S-Nim 题意 题意就是给出一个数组h,为每次可以取石子的数目. 然后给你n堆石子每堆si.求解先手能不能赢? 分析 根据\(h\)数组预处理出\(sg[i]\) ...
- HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)
Fibonacci again and again Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- hdu-------(1848)Fibonacci again and again(sg函数版的尼姆博弈)
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- SG函数
入门一: 首先来玩个游戏,引用杭电课件上的: (1) 玩家:2人:(2) 道具:23张扑克牌:(3) 规则:游戏双方轮流取牌:每人每次仅限于取1张.2张或3张牌:扑克牌取光,则游戏结束:最后取牌的一方 ...
- hdoj 1729 Stone Games(SG函数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1729 看了题目感觉像Nim,但是有范围限制,有点不知道SG函数该怎么写 看了题解,最后才明白该怎么去理 ...
随机推荐
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.9.SportsStore:Securing the Administration Features
1 设置表单身份认证 因为ASP.NET MVC基于ASP.NET平台的核心,所以我们可以使用ASP.NET Form的身份认证,这是保持用户登录轨迹通用的方法.现在介绍最基本的配置. 在Web.co ...
- -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
-Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可 ...
- 如何在VS2013中新建WindowsService定时任务
http://jingyan.baidu.com/article/cd4c2979e9330d756f6e6070.html 很多人都想做定时任务,但是没有不知道如何下手,现在就用WindowsSer ...
- jQuery添加删除元素
$(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...
- HDU 5934:Bomb(强连通缩点)
http://acm.hdu.edu.cn/showproblem.php?pid=5934 题意:有N个炸弹,每个炸弹有一个坐标,一个爆炸范围和一个爆炸花费,如果一个炸弹的爆炸范围内有另外的炸弹,那 ...
- 上传图片到阿里云OSS和获取上传图片的外网url的步骤
啥都不说 直接上代码 1.html: <form action="/bcis/api/headImgUpload.json" method="post" ...
- YTU 3006: 迷宫问题(栈与队列)
3006: 迷宫问题(栈与队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 1 题目描述 编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径 ...
- 第十二届浙江省大学生程序设计大赛-Capture the Flag 分类: 比赛 2015-06-26 14:35 10人阅读 评论(0) 收藏
Capture the Flag Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge In computer security, Ca ...
- 【20160924】GOCVHelper MFC增强算法(5)
CString ExportListToExcel(CString sExcelFile,CListCtrl* pList, CString strTitle) { CStr ...
- Unity安卓上播放视频的问题,暂时无解记录一下
设备联想A7600m,好像是联发科的cpu 先用网上流传很广的这个Unity自带接口试验一下: Handheld.PlayFullScreenMovie(Path.Combine(Applicatio ...