【BFS】斗地主
斗地主
题目描述
这不,他又找了他的几个好基友去他家里玩斗地主了……
身为奆老的小 X 一向认为身边人和自己一样的厉害,他坚信你和他一样有未卜先知的能力,他在他们玩完斗地主后,告诉了你他们的最终得分,希望你猜出他们最少玩了几局牌?
注意:小 X 他们至少玩了 1 局斗地主。
以下是斗地主的规则:发完牌后三人依次叫牌,可叫 1 分、2 分、3 分或不叫,所叫的分数称为底分,分数叫的高赢的多,输的也多。叫完后叫分最高者为地主,然后开始打牌,若地主获胜则地主得到 2 倍的底分,其余两家农民各输掉一份底分;若地主输了则地主输掉2 倍的底分,其余两家农民各赢得一份底分。
输入
输出
样例输入
5 0 0 0
样例输出
2
提示
开始时 3 人得分均为 0 分,第一副牌小 X 做了 3 分地主获胜,3 人得分变为 6,-3,-3,第二副牌小 X 继续做了 3 分地主失败,3 人得分归 0,符合输入要求,牌局结束。
对于 30%的数据,n<=5
对于另外 20%的数据,a,b,c 中有两个数相等
对于 100%的数据,n<=100,-300<=a,b,c<=300,a+b+c=0
【题解】
由于A+B+C = 0 ,其实我们枚举两个人就行了,然后每个人可以当地主,每次可以选择3种底分,还有输赢2种情况。所以所有的情况有 3 * 3 * 2 = 18 种情况。
利用BFS进行搜索即可。
注意细节有:1、可能为负数所以可以加一个偏移量使它变正。
2、搜索两个维度即可,第三个是固定的。
3、如果三个人都为0,特判 打了多少局,如果大于等于2,答案就是2,否则就是-1.
#include<bits/stdc++.h>
using namespace std;
const int N = ;
const int M = ;
int p[] = {
,-,-,,-,,
,-,-,,-,,
,-,-,,-,
};
int q[] = {
-,,,-,-,,
-,,,-,-,,
-,,,-,-,
};
typedef struct Node{
int x,y, step;
}Node;
int n,a,b,c;
int vis[N+][N+];
void BFS( ){
queue<Node>Q;
Q.push( Node{,,} ); vis[M][M] = ;
while( !Q.empty() ){
Node cur = Q.front();
Q.pop();
int A = cur.x ;
int B = cur.y ;
int C = - A - B ;
if( n < cur.step ) continue ;
if( A == a && B == b && C == c ){
cout << cur.step << endl;
return ;
}
for( int i = ; i < ; i++ ){
int tx = A + p[i] ;
int ty = B + q[i] ;
if( - <= tx && tx <= && - <= ty && ty <= ){
if( !vis[tx+M][ty+M] ){
Q.push( Node{tx , ty , cur.step+ } );
vis[tx+M][ty+M] = ;
}
}
}
}
cout << - << endl;
return ;
}
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL) , cout.tie(NULL);
cin >> n >> a >> b >> c ;
if( a == && b == && c == ){
if( n >= ) cout << << endl;
else cout << - << endl ;
}else{
BFS();
}
return ;
}
【BFS】斗地主的更多相关文章
- 基于android平台的斗地主AI
本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...
- 斗地主[NOIP2015]
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- 2106. [NOIP2015] 斗地主
2106. [NOIP2015] 斗地主 ★★★☆ 输入文件:landlords.in 输出文件:landlords.out 简单对比 时间限制:2 s 内存限制:1025 M ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- Sicily 1215: 脱离地牢(BFS)
这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...
- Sicily 1048: Inverso(BFS)
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...
随机推荐
- ES索引文件和数据文件大小对比——splunk索引文件大小远小于ES,数据文件的压缩比也较ES更低,有趣的现象:ES数据文件zip压缩后大小和splunk的数据文件相当!词典文件tim/tip+倒排doc/pos和cfs文件是索引的大头
和splunk对比: ES中各个倒排索引文件的分布: 测试说明:ES2.41版本,数据使用500次批量插入,每批数据都不同,大小500条,每条数据50个字段,对应的字符串使用长度为1-10个单词随机生 ...
- linux 安装nginx -查看 linux的环境变量
我发现在linux上面安装linux很简单 在CentOS release 6.5 上面先看一下操作系统的版本: lsb_release -a 直接执行 yum install nginx 系统自动的 ...
- js回车键事件
js回车键事件 一.总结 一句话总结: $("#focus").keypress(function(event){if(event.which === 13) { /*点击回车要执 ...
- socket_timeout
https://github.com/pika/pika/blob/03542ef616a2a849e8bfb0845427f50e741ea0c6/docs/examples/using_urlpa ...
- c++ 套接字 --->2002 java NIO --->netty
c++ 套接字 --->2002 java NIO --->netty
- Win10系统安装VMware-viclient-6.0无响应问题解决方法
背景:笔记本重做系统升级至Win10系统后,由于工作需要,得安装VMware-viclient-6.0软件进行远程连接. 问题:没有出现网上那种各种报错情况,只是在点击“安装”按钮的时候没弹出任何等待 ...
- STL函数适配器
一:适配器简介 C++中有三类适配器,分别是容器适配器,迭代器适配器和函数适配器,这里主要介绍函数适配器. (一)函数适配器简介 STL中已经定义了大量的函数对象,但是有时候需要对函数返回值进行进一步 ...
- linux cron计划任务防止多个任务同时运行
使用linux flock 文件锁实现任务锁定,解决冲突格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command选项-s, --s ...
- c-lodop的三个进程和一个服务介绍
在windows任务管理器里,最新版可以看到有三个进程,例如安32位c-lodop的时候,有CLodopPrint32.exe.CLodopPrint32_backup.exe.CLodopServi ...
- C# 3DES加密解密,差点要了命
最近 一个项目.net 数据采用3DES加密.下面分享一下,这里的KEY采用Base64编码,便用分发,c#的Byte范围是0-255核心是确定Mode和Padding,关于这两个的意思可以搜索3DE ...