zoukankan      html  css  js  c++  java
  • CodeForces 489A (瞎搞) SwapSort

    题意:

    给n个整数(可能有重复),输出一个不超过n次交换的方案,使得经过这n次交换后,整个序列正好是非递减的。

    分析:

    首先说题解给的算法。

    从左到右扫一遍,交换第i个数和它后面最小的那个数。

    代码看起来大概是这个样子的:

     1     for (int i = 0; i < n; i++)
     2     {
     3         int j = i;
     4         for (int t = i; t < n; t++)
     5             if (a[j] > a[t])
     6                 j = t;
     7         if (i != j)
     8             answer.push_back(make_pair(i, j));
     9         swap(a[i], a[j]);
    10     }
    代码君

    当时看到这题一直没有明确的思路,于是开始乱搞。 =_=||

    首先排了下序,然后从左到右逐个对比原序列和排序后的序列,如果有不一样的,就从原序列的后面把这个“正确”的数找出来交换,直到两个序列完全相同。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn = 3000 + 10;
     8 int a[maxn], b[maxn], ans[maxn][2];
     9 
    10 int main()
    11 {
    12     int n;
    13     while(scanf("%d", &n) == 1 && n){
    14     for(int i = 0; i < n; ++i)
    15     {
    16         scanf("%d", &a[i]);
    17         b[i] = a[i];
    18     }
    19     sort(b, b + n);
    20 
    21     int cnt = 0;
    22     bool flag;        //标记是否发生过交换
    23     while(1)
    24     {
    25         flag = false;
    26         for(int i = 0; i < n; ++i)
    27         {
    28             if(a[i] != b[i])
    29             {
    30                 flag = true;
    31                 for(int j = n-1; j >= 0; --j)
    32                     if(a[j] == b[i] && i != j)
    33                     {
    34                         swap(a[i], a[j]);
    35                         ans[cnt][0] = i;
    36                         ans[cnt++][1] = j;
    37                         break;
    38                     }
    39             }
    40         }
    41         if(!flag)   break;
    42     }
    43     printf("%d
    ", cnt);
    44     for(int i = 0; i < cnt; ++i) printf("%d %d
    ", ans[i][0], ans[i][1]);
    45     }
    46 
    47     return 0;
    48 }
    代码君
  • 相关阅读:
    python_tkinter弹出对话框2
    python_tkinter弹出对话框1
    python生成图片二维码(利用pillow)
    nginx配置ssl证书流程及常见问题
    Django app安装,配置mysql,时区,模板,静态文件,媒体,admin
    使用Git Flow规范!
    python快速生成验证码
    json&pickle模块
    sys模块
    常用模块
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4105476.html
Copyright © 2011-2022 走看看