【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++. ...
随机推荐
- lucene正向索引(续)——每次commit会形成一个新的段,段"_1"的域和词向量信息可能存在"_0.fdt"和"_0.fdx”中
DocStoreOffset DocStoreSegment DocStoreIsCompoundFile 对于域(Stored Field)和词向量(Term Vector)的存储可以有不同的方式, ...
- [ambari环境搭建](未完待续)
[安装] https://blog.csdn.net/Happy_Sunshine_Boy/article/details/86595945#commentBox https://www.jiansh ...
- 配置 阿里云ECS Ubuntu 16.04 64bit 桌面环境
1. 步骤 安装软件 修改root权限 重启 2. 详情 1. 安装软件 创建脚本文件(例如:desktopSetting.sh),并输入以下内容: #!/bin/bash #更新软件库 apt-ge ...
- SQL优化 | 避免全表扫描
1. 对返回的行无任何限定条件,即没有where 子句 2. 未对数据表与任何索引主列相对应的行限定条件 例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用 ...
- web框架性能点
awesome-go-web-frameworks/README.md at master · speedwheel/awesome-go-web-frameworkshttps://github.c ...
- E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem. 爆错解决办法
author :headsen chen date : 2019-06-06 10:09:06 root@ubuntu:~# apt-get remove java-1.8.0-openjdk E ...
- keras损失函数
keras文档: http://keras.io/objectives/ mean_squared_error / mse 均方误差,常用的目标函数,公式为((y_pred-y_true)**2) ...
- DTC & MSDTC (待研究)
相关学习文档: Database Systems: The Complete Book
- 二进制包安装Mysql
(1).准备工作 前往mysql官网下载二进制安装包,https://dev.mysql.com/downloads/mysql/5.7.html#downloads(注意:选择操作系统时选Linux ...
- 123457123456---熊猫猜谜语02(儿童猜谜语大全)--com.threeObj03.CaiMiYu02
熊猫猜谜语02(儿童猜谜语大全)--com.threeObj03.CaiMiYu02