[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 ...
随机推荐
- mysql批量更新、多表更新、多表删除
本文介绍下,mysql中进行批量更新.多表更新.多表删除的一些实例,有需要的朋友可以参考下. 本节主要内容: mysql的批量更新.多表更新.多表删除 一,批量更新: 复制代码代码示例: update ...
- ibatis访问oracle数据库US7ASCII中文乱码问题
今天碰到一个问题,使用ibatis框架访问编码为US7ASCII的oracle数据中文乱码, 找了很久终于有了解决方案 首先 SqlMap-Config.xml按如下配置 <sqlMapConf ...
- linux 安装Tesseract-OCR
linux 安装Tesseract-OCR 准备工作:一.编译环境: 1. gcc gcc-c++ make(这个环境一般机器都具备,可以忽略) yum install gcc gcc-c++ mak ...
- 理解sparse coding
理解sparse coding 稀疏编码系列: (一)----Spatial Pyramid 小结 (二)----图像的稀疏表示——ScSPM和LLC的总结 (三)----理解sparse codin ...
- Handlebars 介绍
最新项目用到了Ember.js前端框架,第一次使用这样的框架,准备国庆节花2天时间,研究一下它的用法. Ember框架的模板引擎用到了handlebars, 先看国外的一篇介绍文章:An Introd ...
- android 为组件添加contextMenu上下文菜单
package com.example.fragmentNavigation2.fragment; import android.os.Bundle; import android.support.v ...
- Codeforces Round #238 (Div. 1)
感觉这场题目有种似曾相识感觉,C题还没看,日后补上.一定要坚持做下去. A Unusual Product 题意: 给定一个n*n的01矩阵,3种操作, 1 i 将第i行翻转 2 i 将第i列翻转 3 ...
- UVALive 5903 Piece it together
一开始用的STL一直超时不能过,后来发现AC的代码基本都用的普通邻接表,然后改了一下13s,T=T,效率太低了.然后把某大神,详情戳链接http://acm.hust.edu.cn/vjudge/pr ...
- USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制
USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...
- 149. Max Points on a Line
题目: Given n points on a 2D plane, find the maximum number of points that lie on the same straight li ...