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的更多相关文章
随机推荐
- UWP 五星评价(不跳转到龟速商店)
之前写过一篇文章 UWP 五星好评 代码如下 var pfn = Package.Current.Id.FamilyName; await Launcher.LaunchUriAsync(new ...
- Form,选择并转移导航菜单
1.代码实例 <!DOCTYPE html> <html> <head> <title>选择并转移导航菜单</title> <meta ...
- c#指针和寻址运算
一.指针和寻址运算 指针格式:<类型>*<变量> 寻址格式:&<变量> 以下程序的运行结果为 注意:每次运行程序时第一行显示的地址都不会一样. usin ...
- 3、ObjectARX开发创建直线、圆、圆弧和修改对象属性
一.本节课程 Arx二次开发创建直线.圆.圆弧和修改对象属性 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建直线. 2.如何应用C++ ARX二次开发创建圆. 3.如何应用C++ AR ...
- 【SIKIA计划】_03_C#初级教程 (2015版)笔记
Win32 API是微软的操作系统Windows提供给开发人员的编程接口,它决定了我们开发的Windows应用程序的能力.MFC是微软为开发人员提供的类库,在某种意义上是对Win32 API的封装.M ...
- 2.5 Oracle之存储过程和MERGE INTO语句
一.MERGE INTO语句 1.merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求.我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方 ...
- NO.2:自学tensorflow之路------BP神经网络编程
引言 在上一篇博客中,介绍了各种Python的第三方库的安装,本周将要使用Tensorflow完成第一个神经网络,BP神经网络的编写.由于之前已经介绍过了BP神经网络的内部结构,本文将直接介绍Tens ...
- VirtualBox共享文件夹 Windows 7 (宿主机) + Ubuntu 12.04
1 安装增强功能包1.1 运行Ubuntu并登陆,菜单“设备”->“安装增强功能包(Install Guest Additions)”ubun1.2 桌面上会多出一个光盘图标,光盘默认自动加载到 ...
- SpringBoot初始教程之Redis集中式Session管理
1.介绍 有关Session的管理方式这里就不再进行讨论,目前无非就是三种单机Session(基于单机内存,无法部署多台机器).基于Cookie(安全性差).基于全局的统一Session管理(redi ...
- webpack入门指南-step03
一.webpack 的使用 webpack简单点来说就就是一个配置文件,所有的魔力都是在这一个文件中发生的. 这个配置文件主要分为三大块 entry 入口文件 让webpack用哪个文件作为项目的入口 ...