题解:

彻彻底底的思维题???还是挺难的。。

首先连样例解释都没给。。没看题解搞了很久

大概就是

一个人要根据另一个人的决策来猜数

可以去看洛谷那篇题解的解释

然后我们用$f[A/B][i][j][k]$

表示第i次操作时,$A/B$能否判断出(j,k)

然后这个挺好dp

另外如果$f[i-1][xx]$可以的话$f[i][xx]$也一定可以

后面要注意两种情况

1.扩展出当前情况的时候

一定要满足其他的已经扩展出,但是当前的没有扩展出(因为这个查了很久)

2.最后一次扩展的时候,如果只能多扩展出这一个,那也是可行的

这个不知道第一个样例就过不了

另外答案是两个之和最小。。。

25组也就1s左右吧

代码:

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
int n,m;
const int M=;
bool f[][M][M];
char cc[];
IL bool pd1(bool (*f) [M],int k,int now)
{
rep(i,m,k)
{
int j=k-i;
if (i>j) break;
if (now!=i&&!f[i][k-i]) return();
}
if (!f[now][k-now]) return();
else return();
}
IL bool pd2(bool (*f) [M],int k,int now)
{
rep(i,m,k)
{
int t=k/i;
if (i>t) break;
if (t*i==k)
if (now!=i&&!f[i][t]) return();
}
if (!f[now][k/now]) return();
else return();
}
IL bool pd3(bool (*f1) [M],bool (*f2) [M],int k,int now)
{
rep(i,m,k)
{
int j=k-i;
if (i>j) break;
if (now!=i&&f1[i][k-i]!=f2[i][k-i]) return();
}
if (f2[now][k-now]&&!f1[now][k-now]) return();
else return();
}
IL bool pd4(bool (*f1) [M],bool (*f2) [M],int k,int now)
{
rep(i,m,k)
{
int t=k/i;
if (i>t) break;
if (t*i==k)
if (now!=i&&f1[i][t]!=f2[i][t]) return();
}
int t=k/now;
if (f2[now][t]&&!f1[now][t]) return();
else return();
}
int main()
{
rep(tt,,)
{
me(f);
char c1[]="guess";
int now=;
if (tt>=) c1[++now]=tt/+,c1[++now]=tt%+;
else c1[++now]=tt%+;
c1[++now]='.'; c1[++now]='i'; c1[++now]='n'; char c2[]="guess";
now=;
if (tt>=) c2[++now]=tt/+,c2[++now]=tt%+;
else c2[++now]=tt%+;
c2[++now]='.'; c2[++now]='o'; c2[++now]='u'; c2[++now]='t';
freopen(c1,"r",stdin);
freopen(c2,"w",stdout);
ios::sync_with_stdio(false);
cin>>n>>cc>>m;
swap(n,m);
int tf;
if (cc[]=='B') tf=; else tf=;
if (!tf)
{
rep(i,,M)
rep(j,,M)
if (i<=j&&i>=m&&j>=m)
if (pd1(f[],i+j,i)) f[][i][j]=;
rep(i,,M)
rep(j,,M)
if (i<=j&&i>=m&&j>=m)
if (pd2(f[],i*j,i)) f[][i][j]=;
} else
{
rep(i,,M)
rep(j,,M)
if (i<=j&&i>=m&&j>=m)
if (pd2(f[],i*j,i)) f[][i][j]=;
rep(i,,M)
rep(j,,M)
if (i<=j&&i>=m&&j>=m)
if (pd1(f[],i+j,i)) f[][i][j]=;
}
rep(k,,n+)
{
rep(i,,M)
rep(j,,M)
f[k][i][j]=f[k-][i][j];
if ((k+tf)%==)
{
rep(i,,M)
rep(j,,M)
if (i<=j&&i>=m&&j>=m)
if (pd1(f[k-],i+j,i)) f[k][i][j]=;
}
else
rep(i,,M)
rep(j,,M)
if (i<=j&&i>=m&&j>=m)
if (pd2(f[k-],i*j,i)) f[k][i][j]=;
}
rep(i,,M)
rep(j,,M)
if (i>=m&&j>=m)
if ((n+tf)%==)
{
if (pd3(f[n-],f[n+],i+j,i)) f[n][i][j]=;
} else
{
if (pd4(f[n-],f[n+],i*j,i)) f[n][i][j]=;
}
n++;
int mina=1e9,minb=1e9;
rep(i,,M)
rep(j,,M)
if (f[n][i][j]&&f[n-][i][j]&&!f[n-][i][j]&&!f[n-][i][j]&&((i+j<mina+minb)||((i+j)==mina+minb&&(i<mina))))
{
mina=i,minb=j;
}
cout<<mina<<" "<<minb<<endl;
int a;
}
return ;
}

[BJOI2018]双人猜数游戏的更多相关文章

  1. [luogu4459][BJOI2018]双人猜数游戏(DP)

    https://zhaotiensn.blog.luogu.org/solution-p4459 从上面的题解中可以找到样例解释,并了解两个人的思维方式. A和B能从“不知道”到“知道”的唯一情况,就 ...

  2. 洛谷P4459/loj#2511 [BJOI2018]双人猜数游戏(博弈论)

    题面 传送门(loj) 传送门(洛谷) 题解 所以博弈论的本质就是爆搜么-- 题解 //minamoto #include<bits/stdc++.h> #define R registe ...

  3. 【洛谷4459】[BJOI2018] 双人猜数游戏(动态规划)

    点此看题面 大致题意: 一直有两个数\(m,n\),已知\(s\le m\le n\),且\(Alice\)和\(Bob\)二个"最强大佬"各知道\(mn\)和\(m+n\).每轮 ...

  4. 【LOJ】#2511. 「BJOI2018」双人猜数游戏

    题解 设\(f[p][a][b]\)表示询问了\(p\)次,答案是\(a,b\)是否会被猜出来 然后判断如果\(p = 1\) 第一个问的\(Alice\),那么\([s,\sqrt{nm}]\)约数 ...

  5. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

  6. usaco 猜数游戏

    Description 为了提高智商,锻炼思维能力,奶牛设计了一个猜数游戏.游戏开始前,贝西会在牛棚后面摆上N个数字.所有数字排成一条直线,按次序从1到N编号.每个数字在1到10^9之间,没有两个数字 ...

  7. (一)Python之猜数游戏

    猜数游戏由简如深的编码学习过程: 3次机会: print('------------------我爱鱼C工作室------------------')count=0while count < 3 ...

  8. 猜数游戏-flag的运用

    package my;import java.util.Scanner;public class MyJava {        public static void main(String[] ar ...

  9. Java课程设计——猜数游戏(201521123111 陈伟泽)

    Java课程设计--猜数游戏(201521123111 陈伟泽) 1.团队课程设计博客链接 博客作业--猜数游戏 2.个人负责模块或任务说明 Answer:一些基础界面的构造,排行榜的构造,用文件录入 ...

随机推荐

  1. Navicat for MySQL连接mysql数据库时提示错误:Can't connect to MySQL server (10060)

    导致些问题可能有以下几个原因: 1.网络不通: 2.服务未启动: 3.防火墙端口未开放: a)首先确认mysql配置正确,并正确开启 service mysqld start; 设置mysql远程连接 ...

  2. jquery $.trim()去除字符串空格

    语法jQuery.trim()函数用于去除字符串两端的空白字符. 作用该函数可以去除字符串开始和末尾两端的空白字符(直到遇到第一个非空白字符串为止).它会清除包括换行符.空格.制表符等常见的空白字符. ...

  3. modsign: could't get uefi db list

    手头上一个工控机,装完 ubuntu  16.04后重启, 一直提示如下错误: modsign: could't get uefi db list 用过ubuntu的修复工具也没有成功. 后经过如下操 ...

  4. 【原创】大数据基础之Logstash(3)应用之http(in和out)

    一个logstash很容易通过http打断成两个logstash实现跨服务器或者跨平台间数据同步,比如原来的流程是 logstash: nginx log -> kafka 打断成两个是 log ...

  5. PyJWT 使用

    最近要用 Falsk 开发一个大点的后端,为了安全考虑,弃用传统的Cookie验证.转用JWT. 其实 Falsk 有一个 Falsk-JWT 但是我觉得封装的太高,还是喜欢通用的 PyJWT . J ...

  6. 洛谷P4705 玩游戏 [生成函数,NTT]

    传送门 这是两个月之前写的题,但没写博客.现在回过头来看一下发现又不会了-- 还是要写博客加深记忆. 思路 显然期望可以算出总数再乘上\((nm)^{-1}\). 那么有 \[ \begin{alig ...

  7. js——字符串处理

    字符串不能修改,所以修改后的结果都是以一个新的字符串返回,原串不改变 1. 创建字符串和typeof           - 空字符串 var str = ""; - " ...

  8. Oracle 数据库导入与出

    Oracle 数据库导入与出 导出( EXPORT )是用 EXP 将数据库部分或全对象的结构和导出 . 导入( 导入( IMPORT )是用 )是用 IMP IMP将 OS 文件中的对象结构和数据装 ...

  9. Confluence 6 为搜索引擎隐藏外部链接

    为搜索引擎隐藏外部链接能够避免向你的站点添加垃圾信息.如果你启用了这个选项的话,任何插入到页面中的 URLs 和评论将会赋予 'nofollow' 属性,这个属性将会禁止搜索引擎进行索引.  快捷链接 ...

  10. Confluence 6 PostgreSQL 问题解决

    如果 Confluence 提示没有 class 文件,你可能将你的 JDBC 驱动放置到了错误的文件夹. 如果你不能从你从 Confluence 中连接到 PostgreSQL ,并且这 2 个服务 ...