http://uoj.ac/contest/6/problem/51

题意:给m($m \le 10^5$)个询问,每次给出$a, b(a^b \le n, n \le 10^9)$,对于每一组$a, b$,双人博弈,每次可以给$a$加1或给$b$加1,要求每次操作后$a^b \le n$。不能操作的算输。问先手是否必胜。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << (#x) << " = " << (x) << endl
#define error(x) (!(x)?puts("error"):0)
#define rdm(x, i) for(int i=ihead[x]; i; i=e[i].next)
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }const int N=1e5+10;
int f[N][33], mx[N];
ll n;int ask(int a, int b) {if((ll)a*a>n) { if(b>1) return 0; return !((n-a)&1); }if(b>mx[a]) return 0;if(f[a][b]!=-1) return f[a][b];if(!ask(a+1, b) && !ask(a, b+1)) return f[a][b]=1;return f[a][b]=0;
}
void init() {int sq=sqrt(n+0.5);for1(i, 2, sq) { int cnt=1; ll now=i;while(now*i<=n) {++cnt;now*=i;} //dbg(cnt);mx[i]=cnt; }
}
int main() {read(n);CC(f, -1);int m=getint();init();while(m--) {int a=getint(), b=getint();!ask(a, b)?puts("Yes"):puts("No");}return 0;
}

显然指数大于等于2的底数小于等于$sqrt(n)$,当底数大于了$sqrt(n)$我们能够根据奇偶判断胜负

然后有$sqrt(n)$个底数,每个底数最多不超过$log n=31$,所以直接记忆化暴力...复杂度$O(sqrt(n)logn)$

【UR #4】元旦三侠的游戏(博弈论+记忆化)相关推荐

  1. A. 【UR #4】元旦三侠的游戏

    题解: 挺水的吧 会发现当b不等于1的时候,状态只有sigma i x^(1/i) 显然这东西很小.. 然后我们会发现每个点向两个点动 定义必胜点和必败点 当一个点有一条边连向必败点 那么它就是必胜点 ...

  2. uoj51 元旦三侠的游戏

    题意:询问a,b,n.每次可以a+1或b+1,保证a^b<=n,不能操作者输.问先手是否赢? n<=1e9. 标程: 1 #include<cstdio> 2 #include ...

  3. [H博弈论] lc1728. 猫和老鼠 II(博弈论+记忆化搜索+周赛224_4)

    文章目录 1. 题目来源 2. 题目解析 1. 题目来源 链接:1728. 猫和老鼠 II 2. 题目解析 棋盘类博弈论问题大多数采用记忆化搜索来进行优化.有效的状态空间没那么多,大多数都 break ...

  4. poj 1085 Triangle War 博弈论+记忆化搜索

    思路:总共有18条边,9个三角形. 极大极小化搜索+剪枝比较慢,所以用记忆化搜索!! 用state存放当前的加边后的状态,并判断是否构成三角形,找出最优解. 代码如下: 1 #include<i ...

  5. 蓝桥杯 ALGO-1005 数字游戏 DFS记忆化搜索+剪枝+杨辉三角 python

    题目 问题描述 给定一个1-N的排列a[i],每次将相邻两个数相加,得到新序列,再对新序列重复这样的操作,显然每次得到的序列都比上一次的序列长度少1,最终只剩一个数字. 例如: 3 1 2 4 4 3 ...

  6. 第三十七章 数论——博弈论

    第三十七章 数论--博弈论 一.Nim游戏 1.题目 2.结论 3.结论验证 4.代码 二.台阶--Nim游戏 1.问题 2.思路 2.代码 三.集合--Nim游戏 1.问题 2.思路-SG()函数 ...

  7. 9206-1118-周三 猜拳小游戏一次性版本

    9206-1118-周三 猜拳小游戏一次性版本 源码 https://cloud.189.cn/t/NV7Njin2MBby(访问码:gr3w) 先建好相关文件 入口文件入口函数中的代码 在入口函数中 ...

  8. 【Java】三款经典游戏 java版本(开源)提升代码水平

    前言 看到标题可能有人要笑我,用Java写游戏?没办法,毕竟无论学什么语言我们都希望它能做出好玩有趣的应用.对于初学者来说,能做出个小游戏玩玩也是很大的学习动力嘛. java基础学习(初学者) 适合准 ...

  9. 近段时间整理出的三款Android游戏源码

    这段时间休息在家的时候,整理出三款Android游戏源码,分享给大家交流学习一下. 1.会说话的汤姆猫Android版** 2.五子连珠游戏Android版**** 3.斗地主游戏Android版 欢 ...

最新文章

  1. java 子类强转父类 父类强转子类
  2. github上的linux项目,克隆GitHub上项目的非Master分支
  3. Django Views(视图函数)
  4. from PyQt4 import QtGui,QtCore出错-解
  5. linuxpython升级3.5_linux升级python3.5到3.6
  6. 程序员加班到凌晨,第二天却被开除,了解原因后大家都说大快人心
  7. python安装jupyterlab_JupyterLab的安装及使用
  8. spring——事务管理
  9. 【论文解读】[目标检测]retinanet
  10. C语言及程序设计提高例程-17 一维数组的定义和引用
  11. swfobject java_SWFObject 2.1以上版本语法介绍
  12. 分布式机器学习:算法、理论与实践
  13. 深度学习基础----GAE和VGAE
  14. WPS个人版如何启用VBA(宏)
  15. 计算机的供电方式,电脑主板电源供电方式
  16. 为自己的站点实现访客统计
  17. 微信摇一摇抽奖的H5制作思路
  18. Matlab篇----常用的回归分析Matlab命令(regress篇)
  19. USV(Unmanned Surface Vessels)研究概况和发展趋势
  20. .xb文件腾讯云备份恢复

热门文章

  1. 6分钟完成ImageNet训练,NVIDIA创下六项AI性能新记录!
  2. 从智能交通到智能能源:智慧城市在7个方面的应用实践
  3. “反机器学习”:人工智能突破的关键是“遗忘”
  4. Google正式发布TensorFlow Lite预览版,针对移动/嵌入设备的轻量级解决方案
  5. 重磅!腾讯发布AI生态计划将赋能1000合作伙伴!
  6. 划水是程序员必备的技能吗? | 每日趣闻
  7. 阿里员工发帖吐槽人不如驴:你不能一边抽我,一边问我爱不爱你?
  8. 面试最后如何回答“你有什么要问我的吗?”
  9. 关于 Nginx 配置 WebSocket 400 问题
  10. 关于Python函数的一些问题