Acdream1311_Apple
无聊的时候看到上一次acdream群赛的一个题目,中间居然是有alice和bob的博弈题目,于是就去做了。
给n,m,两人轮流操作,每次操作可以使n+1,或者m+1,谁操作后满足nm>=A,那么此人lose。
简单的博弈知识即可解决问题,如果当前状态的所有后继状态都是必胜态,那么该状态就是必败态;如果当前状态的后继状态中有一个是必败状态,那么这个状态就是必胜状态。
记忆化搜索。状态数其实不多sqrt(N)*log(N),其中N=109。
不过要注意几种特殊情况,一开始n,m的幂就大于A的时候,不需要判断后继状态,直接是lose。如果n=1,而m=log2A,那么会是draw,因为谁加了n谁就输了,两人都不会动n。如果m=1,而n>=sqrt(A),那么游戏只能沿着n增加的方向走动,直接判断步数只差的奇偶即可得出答案。剩下的问题就需要通过一些编程技巧来解决了。。。。
搜索的时候也是有一定技巧可言的。
召唤代码君:
/*
* this code is made by 092000
* Problem: 1131
* Verdict: Accepted
* Submission Date: 2014-07-18 19:32:01
* Time: 0MS
* Memory: 10268KB
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std; int f[][],tag[][],TAG=;
int n,m,A; bool large(int x,int y)
{
int tot=;
while (y)
{
if (y&)
{
if (tot>A/x) return true;
else tot*=x;
}
y>>=;
if (y && x>A/x) return true;
else x*=x;
}
return tot==A;
} int dfs(int x,int y)//power(x,y)
{
if (tag[x][y]==TAG) return f[x][y];
tag[x][y]=TAG;
if (large(x,y)) return f[x][y]=-;//power
if (x== && large(x+,y)) return f[x][y]=;
if (y== && large(x,y+))
{
int tmp=A-x;
if (tmp&) return f[x][y]=-;
else return f[x][y]=;
}
f[x][y]=-;
int tmp1=dfs(x+,y),tmp2=dfs(x,y+);
if (tmp1>-) f[x][y]=max(f[x][y],-tmp1);
if (tmp2>-) f[x][y]=max(f[x][y],-tmp2);
return f[x][y];
} int main()
{
for (;scanf("%d%d%d",&n,&m,&A)!=EOF;TAG++)
{
if (dfs(n,m)==) puts("draw");
else if (dfs(n,m)>) puts("win");
else puts("lose");
}
}
Acdream1311_Apple的更多相关文章
随机推荐
- linux安装anaconda3
1,查看系统的版本 Uname –r 2,安装git 等依赖库 yum install git yum install zlib-devel bzip2-devel openssl-devel nc ...
- JavaScript——变量与基本数据类型
前言 JavaScript中的变量为松散类型,所谓松散类型就是指当一个变量被申明出来就可以保存任意类型的值,就是不像SQL一样申明某个键值为int就只能保存整型数值,申明varchar只能保存字符串. ...
- 一个简单的获取RGB值方式
操作系统内置了许多小工具,有时候这些小工具也挺有用的,省去了安装一些复杂的软件, 截图 通过键盘PrtSc获取到要取色的图片,然后用画图工具打开 查看 通过画图工具的取色工具,取到你需要的颜色,然后点 ...
- Python学习过程笔记整理(一)
编码方式 -Utf8编码方式:# -*- coding: utf-8 -*- 注释 -行注释 # -块注释 '''...'''或"""...""&qu ...
- 图片隐写--XOR&OR&and
图片xor的脚本 和图片进行xor or and 运算的脚本 from PIL import Image #import pil def loadImage(filename): img = Imag ...
- Jmeter接口测试(五)变量及参数化
在请求过程中,有时我们需要在请求中设置一些变量来测试不同的场景. 提示:在调试请求过程中,无关的请求可以暂时禁用掉,选择某个暂时不用的请求,右键--禁用 Jmeter 支持以下类型变量:所有类型的变量 ...
- 解决ScrollViewer嵌套的DataGrid、ListBox等控件的鼠标滚动事件无效
C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个DataGrid.ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果 ...
- linux shell 压缩解压命令
.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...
- Ubuntu下配置Anaconda
转自:https://blog.csdn.net/Horcham/article/details/57075388 安装Anaconda Ubuntu下似乎库中不自带Anaconda,是自带纯净的py ...
- dmesg命令详解
基础命令学习目录 http://linux.cn/article-3587-1.html dmesg 命令的使用范例 下面我们展示一些最负盛名的‘dmesg’命令工具以及其实际使用举例.‘dmesg’ ...