洛谷P4459/loj#2511 [BJOI2018]双人猜数游戏(博弈论)
题面
题解
所以博弈论的本质就是爆搜么……
//minamoto
#include<bits/stdc++.h>
#define R register
#define pi pair<int,int>
#define fi first
#define se second
#define IT vector<int>::iterator
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=505;
int f[25][N][N],cnt[N*N],g[N][N];vector<int>v[N*N];
int S,T,k;char c[25];
bool dp(int p,int a,int b){
if(!p)return 0;
if(~f[p][a][b])return f[p][a][b];
if(p==1){
f[p][a][b]=((k==1)?(cnt[a*b]<=1):(a+b-2*S<=1));
return f[p][a][b];
}
if(dp(p-1,a,b))return f[p][a][b]=1;
if((p&1)==k){
int c=0;
for(IT it=v[a*b].begin();it!=v[a*b].end();++it)
if(!dp(p-1,*it,a*b/(*it)))++c;
f[p][a][b]=(c==1);
}else{
int c=0;
fp(i,S,((a+b)>>1))if(!dp(p-1,i,a+b-i))++c;
f[p][a][b]=(c==1);
}
return f[p][a][b];
}
bool ck(int a,int b){
if(~g[a][b])return g[a][b];
int c=0;
if(((T+2)&1)==k){
for(IT it=v[a*b].begin();it!=v[a*b].end();++it)
if(dp(T+1,*it,a*b/(*it))&&!dp(T,*it,a*b/(*it)))++c;
}else{
fp(i,S,((a+b)>>1))
if(dp(T+1,i,a+b-i)&&!dp(T,i,a+b-i))++c;
}
g[a][b]=(c==1);
return g[a][b];
}
pi solve(){
memset(f,-1,sizeof(f));
memset(g,-1,sizeof(g));
memset(cnt,0,sizeof(cnt));
fp(i,S*S,500*500){
int t=sqrt(i);v[i].clear();
fp(j,S,t)if(i%j==0)++cnt[i],v[i].push_back(j);
}
fp(s,S+S,1000)fp(i,S,500){
if(i>s)break;
fp(j,i,s-i){
if(i+j>s)break;
if(dp(T+1,i,j)&&!dp(T,i,j)&&ck(i,j))return pi(i,j);
}
}
}
int main(){
freopen("guess25.in","r",stdin);
scanf("%d%s%d",&S,c+1,&T);
k=(c[1]=='A');
pi ans=solve();
printf("%d %d\n",ans.fi,ans.se);
return 0;
}
洛谷P4459/loj#2511 [BJOI2018]双人猜数游戏(博弈论)的更多相关文章
- [BJOI2018]双人猜数游戏
题解: 彻彻底底的思维题???还是挺难的.. 首先连样例解释都没给..没看题解搞了很久 大概就是 一个人要根据另一个人的决策来猜数 可以去看洛谷那篇题解的解释 然后我们用$f[A/B][i][j][k ...
- 【洛谷4459】[BJOI2018] 双人猜数游戏(动态规划)
点此看题面 大致题意: 一直有两个数\(m,n\),已知\(s\le m\le n\),且\(Alice\)和\(Bob\)二个"最强大佬"各知道\(mn\)和\(m+n\).每轮 ...
- [luogu4459][BJOI2018]双人猜数游戏(DP)
https://zhaotiensn.blog.luogu.org/solution-p4459 从上面的题解中可以找到样例解释,并了解两个人的思维方式. A和B能从“不知道”到“知道”的唯一情况,就 ...
- BZOJ5291/洛谷P4458/LOJ#2512 [Bjoi2018]链上二次求和 线段树
原文链接http://www.cnblogs.com/zhouzhendong/p/9031130.html 题目传送门 - LOJ#2512 题目传送门 - 洛谷P4458 题目传送门 - BZOJ ...
- 洛谷P4458 /loj#2512.[BJOI2018]链上二次求和(线段树)
题面 传送门(loj) 传送门(洛谷) 题解 我果然是人傻常数大的典型啊-- 题解在这儿 //minamoto #include<bits/stdc++.h> #define R regi ...
- 洛谷P4457/loj#2513 [BJOI2018]治疗之雨(高斯消元+概率期望)
题面 传送门(loj) 传送门(洛谷) 题解 模拟赛的时候只想出了高斯消元然后死活不知道怎么继续--结果正解居然就是高斯消元卡常? 首先有个比较难受的地方是它一个回合可能不止扣一滴血--我们得算出\( ...
- 【LOJ】#2511. 「BJOI2018」双人猜数游戏
题解 设\(f[p][a][b]\)表示询问了\(p\)次,答案是\(a,b\)是否会被猜出来 然后判断如果\(p = 1\) 第一个问的\(Alice\),那么\([s,\sqrt{nm}]\)约数 ...
- 洛谷1005 【NOIP2007】矩阵取数游戏
问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)
1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...
随机推荐
- Python可执行对象——exec、eval、compile
Python提供的调用可执行对象的内建函数进行说明,涉及exec.eval.compile三个函数.exec语句用来执行存储在代码对象.字符串.文件中的Python语句,eval语句用来计算存储在代码 ...
- c++builder delphi 调用dll dll编写
c++builder动态调用dll // 定义 typedef int __stdcall MyFunction (int x, char *str); ; String dllName = &quo ...
- Shell脚本 判断
#Linux系统Shell脚本判断变量文件目录:权限.是否存在.空值.相等 1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真str1 != str2 当串str1和str2不等时 ...
- java之多态性
多态性(Polymorphism):一个东西,在不同的情况下,呈现出不同的行为两类:静态多态性:函数重载void add(int a,int b){}void add(int a,int b,int ...
- 【HDU4307】Matrix
本篇博客基本全篇转自https://www.cnblogs.com/staginner/archive/2012/08/13/2636826.html,太强啦ORZ 题意 A是个1*n的矩阵,每个元素 ...
- Ubuntu无法安装rpm包,ubuntu RPM should not be used directly install RPM packages, use Alien instead!
Ubuntu无法安装rpm包,ubuntu RPM should not be used directly install RPM packages, use Alien instead! 简单来说, ...
- 283. Move Zeroes把零放在最后面
[抄题]: Given an array nums, write a function to move all 0's to the end of it while maintaining the r ...
- Python学习笔记_我的参考网址
Python学习笔记, 下面记录网上搜到的可参考的网址: 一.关于Tkinter 1.Python3中tkinter模块使用方法详解 https://blog.csdn.net/Fighting_Bo ...
- hdu 4279 Number(G++提交)
打表找规律: #include<stdio.h> #include<math.h> #define N 250 bool judge(int i,int j) { ;k< ...
- 清除Vs2010的工作区影射关系的缓存信息的文件夹路径
C:/Users/Administrator/AppData/Local/Microsoft/Team Foundation/3.0/Cache