UVA - 141 The Spot Game
来源:互联网 发布:新淘宝店铺转让价格表 编辑:程序博客网 时间:2024/06/05 07:37
题目大意:给出一个 N 表示 N×N 的棋盘,以下 2N 行每行表示一个人的操作,两个人轮流,数字表示操作的位置,+ 表示放一个点,- 表示取一个点,当棋盘重复(旋转90、180、270后相同的就算重复)时,当前操作的人失败。若 2N 步后无胜负则平局。
解题思路:step 表示棋盘状态,根据操作来改变,因为 N 最大 50 开个[2][50+5] 就行,将这个二维数组映射到一维数组 sta,方便判重,每改变一次棋盘都拿当前棋盘和旋转后的各个情况去判断,而 map 只要保存其中一种状况就可以。
#include<iostream> #include<cstdio>#include<cmath>#include<string.h>#include<stdlib.h>#include<algorithm>#include<queue>#include<map>using namespace std;map<string, bool> m;char sta[110];int step[2][55];int t, flag, N;bool ok() { int i, j, n, k, t; for (i = j = n = 0; i < N<<1; i++) { sta[i] = step[n][j++]+1; if (j >= N) {j = 0; n++;} } if (m[sta]) return 1; for (i = j = 0, t = n = 1; i < N<<1; i++) { sta[i] = step[n][j]+1; j += t; if (j >= N) {j = N-1; n--; t = -1;} } if (m[sta]) return 1; for (i = n = 0, j = N-1; i < N<<1; i++) { sta[i] = step[n][j--]+1; if (j < 0) {j = N-1; n++;} } if (m[sta]) return 1; for (i = 0, j = N-1, t = -1, n = 1; i < N<<1; i++) { sta[i] = step[n][j]+1; j += t; if (j < 0) {j = 0; n--; t = 1;} } if (m[sta]) return 1; else m[sta] = 1; return 0;}int main() { while (scanf("%d", &N) && N) { m.clear(); memset(step, 0, sizeof(step)); flag = 0; int a, b; char c; for (int i = 0; i < N<<1; i++) { scanf("%d%d %c", &a, &b, &c); if (flag) continue; if (c == '-') t = -1; else t = 1; step[0][a-1] += t; step[1][b-1] += t; if (ok()) { printf("Player %d wins on move %d\n", (i+1)%2+1, i+1); flag = 1; } } if (!flag) printf("Draw\n"); }return 0;}
0 0
- Uva 141 The spot game
- UVa 141 The Spot Game
- uva 141 - The Spot Game
- uva 141 The Spot Game
- UVa 141 - The Spot Game
- UVA 141 - The Spot Game
- UVA 141 - The Spot Game
- UVa:141 The Spot Game
- UVA 141 - The Spot Game
- UVA - 141 The Spot Game
- UVa 141 - The Spot Game
- uva 141 The Spot Game
- UVA - 141 The Spot Game
- uva 141 The Spot Game hash
- UVA 141 The Spot Game 斑点游戏。。
- uva 141 The Spot Game(STL set)
- UVa 141 & HOJ 1186 - The Spot Game
- UVA - 141 The Spot Game(hash)
- Nginx源码安装
- base64图片在jasperreport模板中显示
- Java类、属性、方法分类及修饰符整合
- 自定义View实例(二)----一步一步教你实现QQ健康界面
- Python3基础:String模块ascii_letters和digits
- UVA - 141 The Spot Game
- TODO:Golang UDP连接简单测试慎用Deadline
- dp 动规 最佳加法表达式
- 图论:聚集系数的求法(针对复杂网络)
- python学习笔记 操作文件和目录
- Java核心技术点之多线程
- Android 从应用到linux驱动
- Java学习2:基于Intellij IDEA开发一个简单的Web Application
- ActionMode 操作模式