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\n", cnt);
44     for(int i = 0; i < cnt; ++i) printf("%d %d\n", ans[i][0], ans[i][1]);
45     }
46
47     return 0;
48 }

代码君

时间: 2024-10-13 10:01:29

CodeForces 489A (瞎搞) SwapSort的相关文章

codeforces 527B:瞎搞

#include"cstdio" #include"queue" #include"cmath" #include"stack" #include"iostream" #include"algorithm" #include"cstring" #include"queue" #include"map" #include"

Codeforces 433C. Ryouko&#39;s Memory Note (中位数,瞎搞,思维)

题目链接: http://codeforces.com/problemset/problem/433/C 题意: 给你一堆数字,允许你修改相同的数字成为别的数字,也可以修改成自己,问你修改后相邻数字的距离的绝对值的和最小是多少. 思路: 首先明确一个结论,一个数轴上一些点,要求一个与他们距离之和尽量小的点,那么这个点就是这些点的中位数,即排序后位于中间的数. 这题的思路是把每一个数的与之相邻的保存下来,为了方便,可以用vector数组.然后为了使得距离之和最短,要取中位数.在一串数字中,距所有数

Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞

Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100610 Description In a Famous TV Show “Find Out” there are n characters and only one Horrible Truth. To make the series breathtaking all way long, the sc

CF1156E Special Segments of Permutation【题解】瞎搞 单调栈

题面:http://codeforces.com/contest/1156/problem/E Luogu翻译:https://www.luogu.com.cn/problem/CF1156E 话说Luogu要改域名了. 大意:给定一个长度为n的排列p,求有多少区间[l,r]满足,p[l]+p[r]=max{p[i]},其中l<=i<=r 据说可以笛卡尔树. 可是我不会. 那么就瞎搞. 预处理出左边第一个比a[i]大的数的位置,记为L[i] R[i]同理为右边. 这个可以用单调栈求. 然后就可

HDU 4937 (杭电多校 #7 1003题)Lucky Number(瞎搞)

题目地址:HDU 4937 多校的题以后得重视起来...每道题都错好多次...很考察细节.比如这道....WA了无数次.... 这题的思路自己真心想不到...这题是将进制后的数分别是1位,2位,3位和更多位的分开来计算. 当是1位的时候,显然只有3到6,此时只能是-1 当是2位的时候,可以转换成一元一次方程求解 当是3位的时候,可以转换成一元二次方程求解 当是4位的时候,此时最多也只有7000个数,7000^3接近1e12.所以剩下的直接枚举进制数来判断即可. 代码如下: #include <i

HDU 4923 Room and Moor(瞎搞题)

瞎搞题啊.找出1 1 0 0这种序列,然后存起来,这种情况下最好的选择是1的个数除以这段的总和.然后从前向后扫一遍,变扫边进行合并.每次合并,合并的是他的前驱.这样到最后从t-1找出的那条链就是最后满足条件的数的大小. Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 307    Accepted Su

HDU 4925 Apple Tree (瞎搞)

找到规律,各一个种一棵树,或者施肥.先施肥,先种树一样. Apple Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 197    Accepted Submission(s): 135 Problem Description I've bought an orchard and decide to plant some

woj 1575 - Signal generators 单调队列优化dp + 瞎搞

戳这里:1575 题意:直线上排列着N个信号发射器,每个信号发射器被激活后将会使得影响范围内的所有发射器都被激活.询问激活任意一个发射器后被激活的发射器数最大是多少. 官方题解:可能会存在环的情况,考虑按坐标排序后i < j < k,j激活了k,然后k再激活i.但是这样可以转化为直接激活k的方案.所以无影响. 于是可以用dp求解.dp[i] = max( dp[j] + 1 ), position[j] + R[i] >= position[i],用单调队列优化时间复杂度为O(n). 向

HDU 5024 Wang Xifeng&#39;s Little Plot(暴力枚举+瞎搞)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5024 Problem Description <Dream of the Red Chamber>(also <The Story of the Stone>) is one of the Four Great Classical Novels of Chinese literature, and it is commonly regarded as the best one. Thi