题意
q次询问,每次询问给你长度为n的排列,然后你每次可以选择一个位置i和i+1的数字进行交换。但是每个位置只能交换一次,问你反转若干次后,这个排列最小是多少?
分析:模拟题,直接代码。(一开始读错题了,外加思路不清晰)
代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int vis[110], pos[110], v[110]; 4 int n; 5 int main() 6 { 7 int t; cin >> t; 8 while (t--) 9 { 10 cin >> n; 11 for (int i = 1; i <= n; i++) 12 cin >> v[i], pos[v[i]] = i; 13 memset(vis, 0, sizeof(vis)); 14 vis[0] = 1; 15 for (int i = 1; i <= n; i++) 16 { 17 while (!vis[pos[i] - 1]) 18 { 19 vis[pos[i] - 1] = 1; 20 swap(v[pos[i]], v[pos[i] - 1]); 21 swap(pos[i], pos[v[pos[i]]]); 22 } 23 vis[pos[i]] = 1; 24 } 25 for (int i = 1; i <= n; i++) 26 printf("%d%c", v[i], i == n ? ' ' : ' '); 27 } 28 }