题目大意
给定一个序列,选取子序列进行交换,使得交换完之后的序列为递增序列。问需要经过几次操作,以及交换的位置。
天坑:
一开始我看案例的第三个,研究了好久,最后发现是题目错了。最后的答案应该是k=2,{3,6},没有5.按照我这个答案的代码提交,就AC了
解题思路
先对序列进行排序
首先,m的答案只有0和1.如果排序后的序列和原来的序列相等,说明之前的序列已经是一个递增的序列,则不需要操作,m=0.如果不相等,则可以直接进行交换,所以操作数m=1.
然后(m=1)的情况下,比较两个序列的每一个字符,如果不相等,则把元素的下标存入数组中,最后进行输出即可。
AC code
//Link:http://codeforces.com/contest/1605/problem/B
//Title:B.Reverse Sort
//Author:Laity
//Time:2021.11.23
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000 + 5;
int main()
{