您的位置:首页 > 其它

1562: [NOI2009]变换序列 - BZOJ

2014-05-22 21:08 330 查看
Description

const
maxn=10010;
var
first,link:array[0..maxn]of longint;
a:array[0..maxn,0..1]of longint;
next,last:array[0..maxn]of longint;
n:longint;

procedure swap(var x,y:longint);
var
t:longint;
begin
t:=x;x:=y;y:=t;
end;

procedure init;
var
i,x:longint;
begin
read(n);
for i:=1 to n do
begin
read(x);
a[i,0]:=i+x;
a[i,1]:=i-x;
if a[i,0]>n then dec(a[i,0],n);
if a[i,1]<1 then inc(a[i,1],n);
if a[i,0]>a[i,1] then swap(a[i,0],a[i,1]);
end;
end;

var
time:longint;
flag:array[0..maxn]of longint;

function path(x:longint):boolean;
var
i:longint;
begin
for i:=0 to 1 do
if (i=0) or (a[x,i]<>a[x,i-1]) then
if flag[a[x,i]]<>time then
begin
flag[a[x,i]]:=time;
if (link[a[x,i]]=0) or (path(link[a[x,i]])) then
begin
link[a[x,i]]:=x;
exit(true);
end;
end;
exit(false);
end;

procedure work;
var
i:longint;
begin
for i:=n downto 1 do
begin
inc(time);
if path(i)=false then
begin
writeln('No Answer');
exit;
end;
end;
for i:=1 to n do
if link[a[i,0]]=i then write(a[i,0]-1,' ')
else write(a[i,1]-1,' ');
end;

begin
init;
work;
end.


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: