很明显是二分图匹配,关键是怎么求字典序最小

想到两种做法,首先是直接匹配,然后从第一位贪心调整

第二种是从最后一个倒着匹配,每次匹配都尽量选小的,这样一定能保证字典序最小

 type node=record
po,next:longint;
end; var e:array[..] of node;
p,cx,cy:array[..] of longint;
v:array[..] of boolean;
i,n,len,x,y,s,d:longint; procedure add(x,y:longint);
begin
inc(len);
e[len].po:=y;
e[len].next:=p[x];
p[x]:=len;
end; function dfs(x:longint):longint;
var i,y:longint;
begin
i:=p[x];
while i<> do
begin
y:=e[i].po;
if not v[y] then
begin
v[y]:=true;
if (cy[y]=) or (dfs(cy[y])=) then
begin
cx[x]:=y;
cy[y]:=x;
exit();
end;
end;
i:=e[i].next;
end;
exit();
end; begin
readln(n);
for i:= to n do
begin
read(d);
x:=i+d;
if x>n then x:=x-n;
y:=i-d;
if y< then y:=y+n;
if x>y then
begin
add(i,x);
add(i,y);
end
else begin
add(i,y);
if x<>y then add(i,x);
end;
end;
s:=;
for i:=n downto do
if cx[i]= then
begin
fillchar(v,sizeof(v),false);
s:=s+dfs(i);
end;
if s<n then writeln('No Answer')
else begin
for i:= to n do
begin
write(cx[i]-);
if i<>n then write(' ');
end;
end;
end.

最新文章

  1. Linux 查找指定名称的进程并显示进程详细信息
  2. docker进入容器方法
  3. POJ 1740
  4. 方法:Linux 下用JAVA获取CPU、内存、磁盘的系统资源信息
  5. Java字节码(.class文件)格式详解(一)
  6. 新建的linux虚拟机找不到eth0解决办法
  7. 怎么在aspx里面添加swf文件
  8. mongoDB单元测试
  9. HTML之Data URL(转)
  10. Bootstrap入门(十七)组件11:分页与标签
  11. apache 基本vhost配置
  12. 模拟select选中option的效果
  13. podman(libpod)---github简单记录
  14. IP,IP地址,mac地址
  15. React native 中使用Fetch请求数据
  16. ASP.NET Core Building chat room using WebSocket
  17. hexo博客pure主题解决不蒜子计数不显示的问题
  18. 关于gcc编译器中函数不用进行原型声明的解释
  19. 11.7 NOIP总复习总结
  20. 泛型1(一些algorithm函数)

热门文章

  1. AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(菜单篇)
  2. 开源 P2P 直播 视频会议
  3. pureftpd安装配置-pureftp参数详解(一)
  4. uva 1056
  5. Windows ftp 连不上Linux
  6. 【面试题013】在O(1)时间删除链表结点
  7. POJ 1026 Cipher(置换群)
  8. Gulp实战和原理解析
  9. hdu1068 Girls and Boys
  10. lintcode 容易题:Partition Array by Odd and Even 奇偶分割数组