当前位置: 首页 > news >正文

BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏 [Nim游戏 SG函数]

小H和小Z正在玩一个取石子游戏。 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏。 小H先进行操作,他想问你他是否有必胜策略,如果有,第一步如何取石子。

N≤10 Ai≤1000


 

裸SG函数啊

然而我连SG函数都不会求了,WA了一会儿之后照别人代码改发现vis公用了...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=15,M=1005;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
 
int n,a[N],m,b[N];
int sg[M],vis[M];
int dfs(int u){//printf("dfs %d\n",u);
    if(sg[u]!=-1) return sg[u];//printf("y\n");
    bool vis[N];memset(vis,0,sizeof(vis));
    for(int i=1;i<=m && b[i]<=u;i++) vis[dfs(u-b[i])]=1;
    for(int i=0;;i++) if(!vis[i]) {sg[u]=i;break;}
    return sg[u];
}
int main(){
    //freopen("in","r",stdin);
    memset(sg,-1,sizeof(sg));sg[0]=0;
    n=read();
    for(int i=1;i<=n;i++) a[i]=read();
    m=read();
    for(int i=1;i<=m;i++) b[i]=read();
    sort(b+1,b+1+m);
    int sum=0;
    for(int i=1;i<=n;i++) sum^=dfs(a[i]);
    if(sum!=0){
        puts("YES");
        int flag=0;
        for(int i=1;i<=n && !flag;i++)
            for(int j=1;j<=m && b[j]<=a[i];j++) 
                if( ( sum^dfs(a[i])^dfs(a[i]-b[j]) )==0 ) {printf("%d %d\n",i,b[j]);flag=1;break;}
    }else puts("NO");
}

 

相关文章:

  • 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]
  • StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改
  • Java培训小结
  • Flume NG 学习笔记(六)Selector(复用与复制)测试
  • [开源]用MQL4实现MD5加密
  • 清除浮动
  • zabbix监控mysql主从状态
  • 大整数算法[12] 有符号乘法
  • 多线程(七)---多线程同步相关问题
  • java基础入门1到100的奇数求和
  • 清除Css中select的下拉箭头样式
  • android中webview携带cookie以及webview所加载网页中js调用java方法问题
  • 模拟 ZOJ 3878 Convert QWERTY to Dvorak
  • 【Java每日一题】20170322
  • JavaScript中的对象复制(Object Clone)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [译] 怎样写一个基础的编译器
  • es6--symbol
  • extjs4学习之配置
  • go append函数以及写入
  • js学习笔记
  • Laravel核心解读--Facades
  • vue2.0项目引入element-ui
  • 复杂数据处理
  • 给第三方使用接口的 URL 签名实现
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于webpack 的 vue 多页架构
  • 将 Measurements 和 Units 应用到物理学
  • 漂亮刷新控件-iOS
  • 深入 Nginx 之配置篇
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 我这样减少了26.5M Java内存!
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 怎样选择前端框架
  • 数据库巡检项
  • ​2021半年盘点,不想你错过的重磅新书
  • #if #elif #endif
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • %@ page import=%的用法
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (4)STL算法之比较
  • (6)STL算法之转换
  • (9)STL算法之逆转旋转
  • (阿里云万网)-域名注册购买实名流程
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一) springboot详细介绍
  • ./configure,make,make install的作用(转)
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET企业级应用架构设计系列之开场白