• UVa 1611 (排序 模拟) Crane


    假设数字1~i-1已经全部归位,则第i到第n个数为无序区间。

    如果i在无序区间的前半段,那么直接将i换到第i个位置上。

    否则先将i换到无序区间的前半段,再将i归位。这样每个数最多操作两次即可归位。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn = 10000 + 10;
     5 int a[maxn];
     6 vector<pair<int, int> > ans;
     7 
     8 void op(int L, int R)
     9 {
    10     ans.push_back(make_pair(L, 2*R-L-1));
    11     int t = R - L;
    12     for(int i = L; i < R; i++) swap(a[i], a[i+t]);
    13 }
    14 
    15 int main()
    16 {
    17     //freopen("in.txt", "r", stdin);
    18 
    19     int T; scanf("%d", &T);
    20     while(T--)
    21     {
    22         int n; scanf("%d", &n);
    23         for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
    24         ans.clear();
    25         for(int i = 1; i < n; i++)
    26         {
    27             if(a[i] == i) continue;
    28             int j;
    29             for(j = i+1; j <= n; j++) if(a[j] == i) break;
    30             if(j - i <= n - j + 1) op(i, j);
    31             else
    32             {
    33                 int t = (n - i + 1) / 2;
    34                 op(n-2*t+1, n-t+1);
    35                 i--;
    36             }
    37         }
    38         int sz = ans.size();
    39         printf("%d
    ", sz);
    40         for(int i = 0; i < sz; i++) printf("%d %d
    ", ans[i].first, ans[i].second);
    41     }
    42 
    43     return 0;
    44 }
    代码君
  • 相关阅读:
    C# 多线程总结 异常处理 线程取消 锁(lock)
    C# sync/async 同步/异步
    C# Parallel 多线程并发
    C# Task TaskFactory 异步线程/异步任务
    C# ThreadPool 线程池
    Nginx基础配置
    Nginx配置通用语法
    Nginx进程间的关系
    Nginx命令行控制
    Flask框架02(路由)
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4420382.html
Copyright © 2020-2023  润新知