[codevs2230]黑白棋子
题目链接
http://www.luogu.org/problem/show?pid=1259#
http://codevs.cn/problem/2230/
题目描述
有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况:
○○○○○●●●●●
移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:
○●○●○●○●○●
任务:编程打印出移动过程。
输入输出格式
输入格式:
一个整数n(n<=50)
输出格式:
若干行,表示初始状态和每次移动的状态,用"o"表示白子,"x"表示黑子,"-"表示空行。
输入输出样例
输入样例#1:
7
输出样例#1:
ooooooo*******--
oooooo--******o*
oooooo******--o*
ooooo--*****o*o*
ooooo*****--o*o*
oooo--****o*o*o*
oooo****--o*o*o*
ooo--***o*o*o*o*
ooo*o**--*o*o*o*
o--*o**oo*o*o*o*
o*o*o*--o*o*o*o*
--o*o*o*o*o*o*o*
思路
分析样例数据可以看到,在最前方的白棋还剩下三个以上时,我们可以把最后一个白棋和其后的第一个黑棋一起移动到空格的位置,输出,然后把最后两个黑棋移动到空格的位置,输出。在最前方的白棋还剩下3个时,继续这样的方法就不适用了。因为无论如何都会到达还剩三步的状态,所以寻找规律直接输出最后几行即可。
四个指针的作用:l:连续的最后一个白棋出现的位置;h:连续的最后一个黑棋出现的位置;j第一个空格的位置;k:最后一个空格的位置
var a:array[..] of char;
n,i,j,k,l,h,x,y:longint; procedure printf;
var i:longint;
begin
for i:= to *n+ do write(a[i]);
writeln;
end; begin
readln(n);
for i:= to n do
a[i]:='o';
for i:=n+ to n* do
a[i]:='*';
a[*n+]:='-';
a[*n+]:='-';
printf;
l:=n;//last'o'
h:=*n;//last'*'
j:=*n+;k:=*n+;//'-'
while l> do
begin
a[j]:=a[l];
a[k]:=a[l+];
a[l]:='-';
a[l+]:='-';
printf;
a[l]:='*';
a[l+]:='*';
a[h]:='-';
a[h-]:='-';
if l<> then printf;
k:=h;
j:=h-;
dec(l);
dec(h,);
end;
write('ooo*o**--*');
for i:= to n- do write('o*');
writeln;
write('o--*o**oo*');
for i:= to n- do write('o*');
writeln;
write('o*o*o*--o*');
for i:= to n- do write('o*');
writeln;
write('--o*o*o*o*');
for i:= to n- do write('o*');
writeln;
end.
当然,你也可以机(wu)智(chi)地寻找字符串之间的规律然后输出,虽然本人对于这种乱搞的做法表示十分愤慨,不过还是给大家把代码贴上。
program st;
var n,i,j:longint;
begin
read(n);
for j:= to *(n-)- do
begin
//write('step ',j,':');
for i:= to n-(j+) div do
write('o');
if j mod <> then write('--');
for i:= to n-(j+) div do
write('*');
if j mod = then write('--');
for i:= to (j+) div do write('o*');
writeln;
end;
// write('step ',j+,':');
write('ooo*o**--*');
for i:= to n- do write('o*');
writeln;
// write('step ',j+,':');
write('o--*o**oo*');
for i:= to n- do write('o*');
writeln;
// write('step ',j+,':');
write('o*o*o*--o*');
for i:= to n- do write('o*');
writeln;
//write('step ',j+,':');
write('--o*o*o*o*');
for i:= to n- do write('o*');
writeln;
end.
[codevs2230]黑白棋子的更多相关文章
- 【分治】黑白棋子的移动-C++
题目描述 有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也 ...
- 在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。
// ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream& ...
- BZOJ.2668.[CQOI2012]交换棋子(费用流zkw)
题目链接 首先黑白棋子的交换等价于黑棋子在白格子图上移动,都到达指定位置. 在这假设我们知道这题用网络流做. 那么黑棋到指定位置就是一条路径,考虑怎么用流模拟出这条路径. 我们发现除了路径的起点和终点 ...
- Java实例---黑白五子棋[单机版]
程序分析 FiveChessFrame.java package com.ftl.frame; import java.awt.Color; import java.awt.Font; import ...
- bzoj 2756奇怪的游戏
2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MB Description Blinke 最近喜欢上一个奇怪的游戏. 这个游戏 ...
- codevs1004四子连棋[BFS 哈希]
1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗 ...
- Codevs p1004 四子连棋
四子连棋 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向 ...
- 【宽度优先搜索】神奇的状态压缩 CodeVs1004四子连棋
一.写在前面 其实这是一道大水题,而且还出在了数据最水的OJ上,所以实际上这题并没有什么难度.博主写这篇blog主要是想写下一个想法--状态压缩.状态压缩在记录.修改状态以及判重去重等方面有着极高的( ...
- BNUOJ 13105 nim博弈
ncredible Chess Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on LightOJ. Ori ...
随机推荐
- sae-多个file_put_contents('saestor://public/text.txt',$data);只写第一次
多个file_put_contents('saestor://public/text.txt',$data); 只执行第一个文件的写入,永久存储也只需要一次写入 如果需要用户中间缓存文件,用tmpfs ...
- 过滤部分错误信息,不输出到stderr
cmd 2>/tmp/stderr.log cat /tmp/stderr.log | grep -v “要过滤信息的关键字” >&2 rm /tmp/stderr.log
- Python设计模式——代理模式(Proxy)
书中的例子是:男A喜欢女A,但是不敢向其表白,所以委托男B为代理,代他送礼物给女A,实现这个需求的重点是,男A和女A是不互相直接接触的,都是通过代理男B,实现间接接触. #encoding=utf-8 ...
- Spring核心框架 - AOP的起源及介绍
一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...
- httpcontext in asp.net unit test
[TestMethod] [HostType("ASP.NET")] [UrlToTest("http://localhost:25153/qq/a.aspx" ...
- 如何在一整张背景图中,加隐形的a标签
很常见的一个需求,就上图每个国家图标都得加上各自指定的a标签 这时,我们就可以去加上隐藏且定位准确的几个a标签 这个时候,主要用到的就是text-indent和overflow 这两个属性的配合.te ...
- 数据结构-------单链表(C++)
相关信息: /** * @subject 数据结构 实验2 * @author 信管1142班 201411671210 赖俊杰 * @project 单链表 * @time 2015年10月29日1 ...
- css3 旋转出现动画
@-moz-keyframes daf{ 0% { -moz-transform: rotate(-360deg) scale(0.2); -webkit-transform: rotate(-360 ...
- ireport 在 AIX Linux websphere下的字体安装
首先,ireport在linux下有些时候是正常的,而有些时候却不正常,只要是汉字就出不来的情况我今天是遇到了. ireport在Linux下不显示中文汉字的解决方法: 将字体文件(后缀名必须是ttf ...
- Ubuntu下使用ap-hotspot出现“Another process is already running"问题的解决方案
参考Problem with ap-hotspot 问题描述: This is the message displayed in my terminal screen when I typed sud ...