zoukankan      html  css  js  c++  java
  • cf #598 B. Minimize the Permutation

    题意

    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 }
  • 相关阅读:
    bzoj1648:奶牛野餐
    bzoj1650:跳石子
    bzoj1643:贝西的秘密草坪
    bzoj1639:月度开支
    bzoj1636:Balanced Lineup
    bzoj1634:护花
    .
    bzoj1620:时间管理
    bzoj1611:流星雨
    bzoj1609:麻烦的聚餐
  • 原文地址:https://www.cnblogs.com/liuwenhan/p/11800015.html
Copyright © 2011-2022 走看看