一个问题
  • 板块学术版
  • 楼主SalN
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/7 10:18
  • 上次更新2024/10/7 11:49:55
查看原帖
一个问题
371825
SalN楼主2024/10/7 10:18

有一个题目是给定一个长度为 nn 的排列 a[1,,n]a[1,\dots,n],可以交换 a[i]i,a[i+1]i+1a[i]\neq i,a[i+1]\neq i+1a[i],a[i+1]a[i],a[i+1],要求构造操作序列使得 a[i]=ia[i]=i,操作序列长度最严格的约束是长度不超过 n(n1)2\frac{n(n-1)}{2}

使用两颗星神力判掉无解在这里不讨论,按照先把 a[i]>ia[i]>i 移到左边然后对于 a[i]>i,a[i]<ia[i]>i,a[i]<i 的部分做冒泡,再整个一起做冒泡,这样构造可以保证次数嘛?如果可以保证是为什么。打表的结论是应该可以。

up(i,1,n) dn(j,i,2) if(a[j]>j&&a[j-1]<j-1) swap(a[j],a[j-1]);
up(i,1,n) dn(j,i,2) if(j>a[j]&&j-1>a[j-1]&&a[j]<a[j-1]) swap(a[j],a[j-1]);
up(i,1,n) dn(j,i,2) if(j<a[j]&&j-1<a[j-1]&&a[j]<a[j-1]) swap(a[j],a[j-1]);
up(i,1,n) dn(j,i,2) if(j!=a[j]&&j-1!=a[j-1]&&a[j]<a[j-1]) swap(a[j],a[j-1]);
2024/10/7 10:18
加载中...