首页 > 其他 > 详细

cf #598 B. Minimize the Permutation

时间:2019-11-05 19:44:39      阅读:97      评论:0      收藏:0      [点我收藏+]

题意

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 ? \n :  );
27     }
28 }

 

cf #598 B. Minimize the Permutation

原文:https://www.cnblogs.com/liuwenhan/p/11800015.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!