题目链接:
- link,点击这里喵。
题意简述:
- 给出一个排列,长度为 n n n 问是否能通过 n − 1 n-1 n−1 次交换(第 i i i 位有且仅可以与 i + 1 i+1 i+1 位交换一次),使这个排列递增(必须交换 n − 1 n-1 n−1 次)。
思路:
- 仅能使用一次,这意味着如果右边有一个数应在这个位置的左边,那么通过这仅有一次机会。
- 如果这一个机会被占用了,那么这个数就不能归位了喵 ~
做法:
- 所以,应当使当前未归位最小数先归位,否则左边的交换会阻止其到达, 右边的交换则对此无影响。
- 定义一个变量 u s e use use 为使用过的右侧边界,若当前要归位的数在 u s e use use 左边,说明已经使用过,则不可行。
if(i<=use && date[i]!=i){
puts("-1");