K - K.Bro Sorting
Description
Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will compare each pair of adjacent items and swap them if they are in the wrong order. The process repeats until no swap is needed.
Today, K.Bro comes up with a new algorithm and names it K.Bro Sorting.
There are many rounds in K.Bro Sorting. For each round, K.Bro chooses a number, and keeps swapping it with its next number while the next number is less than it. For example, if the sequence is “1 4 3 2 5”, and K.Bro chooses “4”, he will get “1 3 2 4 5” after this round. K.Bro Sorting is similar to Bubble sort, but it’s a randomized algorithm because K.Bro will choose a random number at the beginning of each round. K.Bro wants to know that, for a given sequence, how many rounds are needed to sort this sequence in the best situation. In other words, you should answer the minimal number of rounds needed to sort the sequence into ascending order. To simplify the problem, K.Bro promises that the sequence is a permutation of 1, 2, . . . , N .
Input
The second line contains N integers a i (1 ≤ a i ≤ N ), denoting the sequence K.Bro gives you.
The sum of N in all test cases would not exceed 3 × 10 6.
Output
Sample Input
5
5 4 3 2 1
5
5 1 2 3 4
Sample Output
Case #2: 1
Hint
In the second sample, we choose “5” so that after the first round, sequence becomes “1 2 3 4 5”, and the algorithm completes. source:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=94498#problem/K这道题是从后往前做的,我想从前往后,试了确实不行,现在想通了,因为这道题是任选一个数字,然后按照冒泡法的思路来排列
那就是说,每一轮排列之后,最大的数字都沉底了,也就是说,对于任意一个数字,只要它的后面有比他小的数字,它就会沉底,
那就可以转化为判断一个数的后面有没有比它小的数字,如果有,这个数就要沉底,也就是进行一轮排列,
任选一个数让他沉底最好的情况就是,每一个数字沉底之后,他都排列在它最终所在的位置 方法:记录一个数后面所有数字中最小的数字,和这个数字比较,如果小于这个数字,那这个数就要沉底,也就是进行一轮排列
从后往前刚好可以判断每一个数后面是否有比他小的数字,前一个计算的结果还可以被后面的计算利用 网上的比较好的解释:
1:给出一个数列,每次随机选择一个数,按照冒泡排序的方法去交换,问这种排序最快需要几个回合
思路:如果某个数右边有比他小的数字,那这个数一定要被扔到后边去。所以线性方法统计有多少个这样的数字即可
2:从后往前,存在一组递增子数列则ans加1,因为对于每个这样的递增子序列我们都最少需要选择一次将其排序
/*
问题:给定一个序列,用给定的排序方法把它从小到大排列
给定方法:任意选择一个数,依次找后边比他小的数,并交换这两个数,直到后边没哟比他小的数
称这样的一次操作为一轮
问多少轮操作之后排序成功
分析:从后往前找递增序列数,对于每个递增序列,至少需要移动一次
*/
#include <iostream>
#include <stdio.h>
#define max_num 1000000+10
int num[max_num];
int main()
{
int t, case_num = ;
scanf("%d", &t);
while(t--)
{
int n, cnt = , mi;
scanf("%d", &n);
for(int i = ; i < n; i++)
scanf("%d", &num[i]);
mi = num[n-];
for(int i = n-; i >= ; i--)
{
if(num[i] < mi)
mi = num[i];
else
cnt++;
}
printf("Case #%d: %d\n", ++case_num, cnt);
}
return ;
}
K - K.Bro Sorting的更多相关文章
- 树状数组--K.Bro Sorting
题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110064#problem/D Description Matt’s frie ...
- HDU 5122 K.Bro Sorting
K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Tot ...
- K.Bro Sorting
Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Total Submissio ...
- 基础题:HDU 5122 K.Bro Sorting
Matt's friend K.Bro is an ACMer.Yesterday, K.Bro learnt an algorithm: Bubble sort. Bubble sort will ...
- HDU 5122 K.Bro Sorting(模拟——思维题详解)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5122 Problem Description Matt's friend K.Bro is an A ...
- hdoj 5122 K.Bro Sorting 贪心
K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others) Tot ...
- K.Bro Sorting(思维题)
K.Bro Sorting Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)T ...
- 61. 从1到n,共有n个数字,每个数字只出现一次。从中随机拿走一个数字x,请给出最快的方法,找到这个数字。如果随机拿走k(k>=2)个数字呢?[find k missing numbers from 1 to n]
[本文链接] http://www.cnblogs.com/hellogiser/p/find-k-missing-numbers-from-1-to-n.html [题目] 从1到n,共有n个数字 ...
- poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。
/** 题目:poj3208 Apocalypse Someday 链接:http://poj.org/problem?id=3208 题意:求第K(K <= 5*107)个有连续3个6的数. ...
随机推荐
- Construct Binary Tree From Inorder and Preorder/Postorder Traversal
map<int, int> mapIndex; void mapToIndex(int inorder[], int n) { ; i < n; i++) { mapIndex.in ...
- [Swust OJ 632]--集合运算(set容器)
题目链接:http://acm.swust.edu.cn/problem/632/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- POJ 3461 Oulipo(模式串在主串中出现的次数)
题目链接:http://poj.org/problem?id=3461 题意:给你两个字符串word和text,求出word在text中出现的次数 思路:kmp算法的简单应用,遍历一遍text字符串即 ...
- PHP解析和生成xml(DOMDocument版)
上次和大家分享了SimpleXML操作xml的一些知识,但是php中除了simplexml还有DOMDocument,这次就着重来看看DOMDocument的用法,还是把生成xml和解析xml分开写 ...
- Redis的入门Demo(java)
java代码部分参考了:http://www.runoob.com/redis/redis-java.html 在java中使用Redis,需要引入Redis驱动,就是jedis-2.1.0.jar, ...
- tmod命令
tmod ./tpl --debug --no-watch --output ./tplbuild
- (Problem 46)Goldbach's other conjecture
It was proposed by Christian Goldbach that every odd composite number can be written as the sum of a ...
- MVC-03 控制器(2)
五.ActionResult解说 ActionResult的继承图: 类型 Controller辅助方法 用途帮助 ContentResult Content 回传一个用户自定义的文字属性 Empty ...
- VC中判断指定窗口是否被其他窗口遮挡
本来是想判断当前窗口是否在最前面,无奈办法用尽就是不行,于是想换个思路:判断指定窗口是否被其他窗口遮挡.然后掘网三尺,找到了这个: bool CTestTray2Dlg::IsCoveredByOth ...
- zip文件压缩(转)
zip文件结构 上面中的每一行都是一个条目,zip文件就是由一个或者多个条目组成. 条目在Java中对应ZipEntry类 创建zip压缩文件 ...