洛谷P2361 yyy棋
来源:互联网 发布:淘宝网客户关系管理 编辑:程序博客网 时间:2024/06/05 05:33
题目描述
uim最近在研究一种游戏,叫做“yyy棋”。
这种游戏的规则很简单,就是有一个A*B的棋盘和黑白两色的棋子,两个人轮流在下在格子里面。你可以下黑棋或者白棋,中途可以更换颜色,可以下在任何你喜欢的地方,但是要符合以下条件:
1、这个位置不能已经被别的棋子占用。
2、你准备下的地方,上下左右一格范围中不能有和你准备下的颜色一样的棋子。
3、第一个下的人必须出黑子。
当谁没有地方可以放子,谁就输了。
uim把你拉了出来,希望你好好地陪他玩。
由于你很忙不太情愿,uim就让步了,允许你选择先手或者后手。
你突然灵光一现,想到了你小学奥数做到的一个问题:两个人坐在一张桌子的两边,轮流往桌子上放硬币,硬币不能重叠,谁放不下谁就输了。感觉有点类似,所以,你打算借鉴这个办法。
你知道,通过某种策略,你一定是100%赢的。
既然如此,就让uim输个痛快吧。
输入输出格式
输入格式:
第一行,A,B,两个整数,表示棋盘大小
接下来若干行,为uim依次下的顺序,x_i,y_i,c_i,分别表示位置和颜色,颜色1为黑,0为白。位置均1<=x_i<=A 1<=y_i<=B。
入过uim发现没地方可走,就可能会耍赖,将棋子下在了不合法的地方。遇到这种情况,你也要指出。当然uim也有可能知道自己输了后就不下了。不存在游戏胜负还没定uim就投降的情况。
输出格式:
第一行,选择先手还是后手,先手请输出“First”,后手输出“Second”。
接下来几行,如果你是第一个下子的,请输出你的第一步下法。然后对uim的下的每一个子做出回应。输出x_i y_i c_i,意思和上面相同。你必须输出必胜的下法,否则你将WA这个点。如过多个下法都是必胜点,请输出个能够尽早结束游戏的下法。
在你下完这个子之前,请假装你不知道uim的下一步走法。
如果uim耍赖,那么这一行输出“Buwanle”并结束程序,多余的输入就不管它了。
输入输出样例
输入样例#1:
2 2
1 2 1
1 1 1
输出样例#1:
Second
2 1 0
Buwanle
说明
40%数据,2<=A,B<=3
100%数据,2<=A,B<=9
分析
这个 题没什么好说的,只要明确一个规则就好了。那就是中心对称的原则。
如果(a*b)是奇数,那么一定有一个中心对称的点,那么就要选择先手,占据这个中心点,否则选择后手。然后对手放在哪里,那么我一定可以找到另一个对称的点放棋子。所以才要占据中心那个点。
对于颜色呢?
如果(a*b)是奇数,那么就每次选择和对手下同样颜色的棋子;
如果是偶数,那么每次就选择和对手下不同颜色的棋子。
自己用(2*3)、( 3 * 3)的棋盘模拟一下就知道为啥了、
代码
好像有点乱的代码。不过还是A了~~~
var num,x,y,z,i,a,b,j:longint; pan:array[1..9,1..9]of integer;function check(x,y,z:longint):boolean;var flag,i,j:integer;begin if (x-1>0)and(pan[x-1,y]=z) then exit(true); if (y+1<=b)and(pan[x,y+1]=z) then exit(true); if (x+1<=a)and(pan[x+1,y]=z) then exit(true); if (y-1>0)and(pan[x,y-1]=z) then exit(true); exit(false);end;begin readln(a,b); for i:=1 to a do for j:=1 to b do pan[i,j]:=-1; if odd(a*b) then begin writeln('First'); writeln(a div 2+1,' ',b div 2+1,' ',1); pan[a div 2+1,b div 2+1]:=1; while not eof do begin readln(x,y,z); pan[x,y]:=z; if (x=0) then begin writeln('Buwanle');halt;end; if check(x,y,z) then begin writeln('Buwanle');halt;end else begin writeln(a-x+1,' ',b-y+1,' ',z); pan[a-x+1,b-y+1]:=z; end; end; end else begin num:=0; writeln('Second'); while not eof do begin readln(x,y,z); if (x=0) then begin writeln('Buwanle');halt;end; inc(num); if (z=0)and(num=1) then begin writeln('Buwanle');halt;end; pan[x,y]:=z; if check(x,y,z) then begin writeln('Buwanle');halt;end else begin writeln(a-x+1,' ',b-y+1,' ',abs(z-1)); pan[a-x+1,b-y+1]:=abs(z-1); end; end; end;end.评测结果:Accepted 得分: 100提交时间:2015-10-18 09:28 耗时:46ms内存:3137kb 点击进入记录列表。 编译信息 Compiling编译成功 评测结果 Result测试点 #1:通过该测试点。 得分20,耗时0ms,内存3137kB。测试点 #2:通过该测试点。 得分20,耗时0ms,内存3100kB。测试点 #3:通过该测试点。 得分20,耗时0ms,内存3133kB。测试点 #4:通过该测试点。 得分20,耗时31ms,内存3137kB。测试点 #5:通过该测试点。 得分20,耗时15ms,内存3133kB。
- 洛谷P2361 yyy棋
- yyy
- yyy
- yyy
- yyy
- yyy
- 洛谷P1803凌乱的yyy
- 洛谷 1803 凌乱的yyy
- 洛谷 P1803 凌乱的yyy
- 凌乱的yyy-洛谷 1803
- 洛谷 P1803 凌乱的yyy
- 洛谷P1803 凌乱的yyy
- P1803 凌乱的yyy 洛谷
- |洛谷|贪心|P1803 凌乱的yyy
- 洛谷Oj-凌乱的yyy-贪心
- 洛谷 1803 凌乱的yyy 贪心
- 洛谷R853607 yyy loves Maths VII 位运算 卡常
- 洛谷P2393 yyy loves Maths II 卡精度 输入优化
- Android APK反编译就这么简单 详解(附图)
- Parameter index out of range (1 > number of parameters, which is 0)
- nginx学习链接
- cocos2d-x跨平台游戏开发视频教程(一)
- 面向 iOS 开发的十款 XCode 插件
- 洛谷P2361 yyy棋
- 正则表达式30分钟入门教程
- 对付拖延心理的方法
- Error:Execution failed for task ':asynctask:packageDebug'
- [黑马训练营]IOS C语言运算符
- centos7+mairadb练习2
- Java 八大排序之——堆排序
- Velocity浅析及与Jsp、Freemarker对比
- Android DrawerLayout demo(抽屉菜单)