您的位置:首页 > 其它

[USACO 4.4.1 Shuttle Puzzle]

2011-10-29 18:13 423 查看
[题目来源]:USACO 4.4.1

[关键字]:数学

[题目大意]:一个1*2n+1的棋盘,左边有n个白子,中间一个空格,右边n个黑子,求出将其交换的步骤。

//==========================================================================================================

[分析]:http://www.nocow.cn/index.php/USACO/shuttle

[代码]:

View Code

{
ID:x yr;
PROB:shuttle
LANG:PASCAL
}
var
n, s: longint;
a: array[0..200] of longint;

procedure init;
var
i, c: longint;
begin
readln(n);
s := 4;
i := 1;
c := 5;
while i < n do
begin
s := s+c;
inc(i);
inc(c,2);
end;
//writeln(s);
//readln;
end;

procedure work;
var
i, l, c1, c2: longint;
begin
i := 1;
l := 1;
c1 := -1;
c2 := 2;
while i <= s div 2 do
begin
a[i] := c1;
for i := i+1 to i+l do
a[i] := c2;
inc(l);
c1 := -c1;
c2 := -c2;
inc(i);
end;
c1 := 0;
l := s div 2;
if not odd(n) then begin inc(l); inc(c1); end;
for i := l to s do
begin
a[i] := a[i-c1];
inc(c1,2);
end;
//for i := 1 to s do write(a[i],'');
//readln;
l := n+1;
for i := 1 to s-2 do
begin
l := l+a[i];
if i mod 20 = 0 then writeln(l) else write(l,'');
end;
l := l+a[s-1];
writeln(l);
//readln;
end;

begin
assign(input,'shuttle.in');reset(input);
assign(output,'shuttle.out');rewrite(output);
init;
work;
close(input);
close(output);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: