HDU 1536 & 1944
http://acm.hdu.edu.cn/showproblem.php?pid=1536
http://acm.hdu.edu.cn/showproblem.php?pid=1944
一样的题
题意:先给一个集合,代表可能发生的转移。然后m个询问,可以理解为每次给l堆石子,每堆有hi个,问博弈策略
直接用sg定理,非常简单,转移给的清清楚楚,照着写就行,递推或者记忆化搜索都行。
这题的时间卡的紧,开始死活过不了,看别人代码把vis数组开成100就过了(原来开的1w),深感此题有问题,sg的值最大应该1w才对(或者我想错了欢迎指出?)
AC 代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm> using namespace std; int sg[], vis[], s[], k; void getSG() {
sg[] = ;
for(int j = ; j <= ; j++) {
memset(vis, , sizeof(vis));
for(int i = ; i < k; i++) {
if(s[i] <= j) vis[sg[j-s[i]]] = ;
}
for(int i = ; ; i++) {
if(!vis[i]) {
sg[j] = i;
break;
}
}
}
} int main() {
while(~scanf("%d", &k), k) {
for(int i = ; i < k; i++)
scanf("%d", &s[i]);
getSG();
int m;
scanf("%d", &m);
while(m--) {
int l;
scanf("%d", &l);
int ans = ;
while(l--) {
int h;
scanf("%d", &h);
ans ^= sg[h];
}
if(!ans) putchar('L');
else putchar('W');
}
putchar('\n');
}
return ;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm> using namespace std; int sg[], vis[], s[], k; int getSG(int x) {
if(sg[x] != -) return sg[x];
memset(vis, , sizeof(vis));
for(int i = ; i < k; i++) {
if(s[i] <= x) {
getSG(x-s[i]);
vis[sg[x-s[i]]] = ;
}
}
for(int i = ; ; i++) {
if(!vis[i]) return sg[x] = i;
}
} int main() {
while(~scanf("%d", &k), k) {
for(int i = ; i < k; i++)
scanf("%d", &s[i]);
int m;
scanf("%d", &m);
memset(sg, -, sizeof(sg));
sg[] = ;
for(int i = ; i <= ; i++)
getSG(i);
while(m--) {
int l;
scanf("%d", &l);
int ans = ;
while(l--) {
int h;
scanf("%d", &h);
ans ^= sg[h];
}
if(!ans) putchar('L');
else putchar('W');
}
putchar('\n');
}
return ;
}
超时代码(但感觉非常正确,不知道被卡在哪里)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm> using namespace std; int sg[], s[], k; void getSG() {
sg[] = ;
for(int j = ; j <= ; j++) {
set <int> S;
for(int i = ; i < k; i++) {
if(s[i] <= j) S.insert(sg[j-s[i]]);
}
int g = ;
while(S.count(g)) g++;
sg[j] = g;
}
} int main() {
while(~scanf("%d", &k), k) {
for(int i = ; i < k; i++)
scanf("%d", &s[i]);
getSG();
int m;
scanf("%d", &m);
while(m--) {
int l;
scanf("%d", &l);
int ans = ;
while(l--) {
int h;
scanf("%d", &h);
ans ^= sg[h];
}
if(!ans) putchar('L');
else putchar('W');
}
putchar('\n');
}
return ;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm> using namespace std; int sg[], s[], k; int getSG(int x) {
if(sg[x] != -) return sg[x];
set <int> S;
for(int i = ; i < k; i++) {
if(s[i] <= x) {
S.insert(getSG(x-s[i]));
}
}
int g = ;
while(S.count(g)) g++;
return sg[x] = g;
} int main() {
while(~scanf("%d", &k), k) {
for(int i = ; i < k; i++)
scanf("%d", &s[i]);
int m;
scanf("%d", &m);
memset(sg, -, sizeof(sg));
sg[] = ;
for(int i = ; i <= ; i++)
getSG(i);
while(m--) {
int l;
scanf("%d", &l);
int ans = ;
while(l--) {
int h;
scanf("%d", &h);
ans ^= sg[h];
}
if(!ans) putchar('L');
else putchar('W');
}
putchar('\n');
}
return ;
}
HDU 1536 & 1944的更多相关文章
- hdu 1536/1944 / POJ 2960 / ZOJ 3084 S-Nim 博弈论
简单的SG函数应用!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #inclu ...
- hdu 1536&&1944 S-Nim sg函数 难度:0
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- S-Nim HDU 1536 博弈 sg函数
S-Nim HDU 1536 博弈 sg函数 题意 首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之 ...
- SG 函数初步 HDU 1536 && HDU 1944
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1944 pid=1536"> http://acm.hdu.edu.cn/showpr ...
- hdu 1536/ hdu 1944 S-Nim(sg函数)
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 【hdu 1536】S-Nim
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- HDU 1536 S-Nim SG博弈
S-Nim Problem Description Arthur and his sister Caroll have been playing a game called Nim for som ...
- HDU 1536 sg函数
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 1536 S-Nim(sg函数模板)
转载自:http://blog.csdn.net/sr_19930829/article/details/23446173 解题思路: 这个题折腾了两三天,参考了两个模板,在这之间折腾过来折腾过去,终 ...
随机推荐
- EVA资料
[史上最全EVA资料+原画+画集+设定集][共2266P=3.56GB] <ignore_js_op> <ignore_js_op> <ignore_js_op> ...
- DSO转换规则的Aggregation默认为覆盖MOV
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 让下拉框中同时显示Key与Value
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 从容而优雅(leisurely and elegant)
每时每刻, 我都变得更好了. ----- 法国心理学家 埃米尔 . 库埃 每时每刻, 我都变得更忙了. ----- 罗伯特 . 西奥迪尼 咬牙切齿的寒风, 昏暗的路灯, 默默的走过那一段从教室到寝 ...
- iOS 圆角图片
// 开启图形上下文UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);// 剪裁 UIBezierPath *path=[UIBezi ...
- Html5 Canvas核心技术(图形,动画,游戏开发)--基础知识
基础知识 canvas 元素可以说是HTML5元素中最强大的一个,他真正的能力是通过canvas的context对象表现出来的.该环境对象可以从canvas元素身上获得. <body> & ...
- mac 文本编辑器 文本编码Unicode utf-8 不适用的问题
在mac上使用默认的文本编辑器打开下载的xx.txt文件,如果文本是gbk的编码可能会出现 文本编码Unicode utf-8 不适用的打开错误,如下图 解决方式: 文本编辑---偏好设置-----打 ...
- 错误overlay id is not a dependency project原因分析
之前按下面配置,一直会报标题中错误,有的同学说改成<overlay><id></id></overlay>就可以了,然而我这里竟然错误依旧. 奇怪的是间 ...
- winform app.config文件的动态配置
获取 获取应用程序exe.config文件中 节点value值 /// <summary> /// 功能: 读取应用程序exe.config文件中 /// appSettings节点下 ...
- github文件上传及github pages博客搭建教程
一.与github建立连接 1.安装node.js和git 2.桌面新建文件夹[github],右键“git bash here” 3.注册github账号,新建仓库“new repository”, ...