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的数. ...
随机推荐
- JZOI
orz..kpm大神做的JZOI卡.很好看 目前是全球限量十张哈哈哈 (正面) (背面) 原图:
- easyui form提交文件(上传图片和文件)
<div id="dialogBtn"> <a class="easyui-linkbutton" href="#" on ...
- JS 利用window.open实现post方式的参数传递
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 帝国cms分页样式修改文件-注意事项
帝国cms分页样式主要有:内容页分页样式.列表页分页样式以及默认搜索模板使用的搜索样式等几种. 要改这些样式其实也很简单,在网站目录中找到相应的.css文件修改empages属性就行了,但是这样比较麻 ...
- [LeetCode]题解(python):117-Populating Next Right Pointers in Each Node II
题目来源: https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 题意分析: 根据上一题,如果给定 ...
- IOS 学习笔记(6) 控件 文本域(UITextField)的使用方法
UITextField控件的诸多特性都和UITextView相似,比如成为输入文本焦点时键盘自动显示,支持长按弹出动作选项,能够接收输入事件(开始输入,修改内容,结束输入和点击回车等). 1.特有的特 ...
- github 的分支操作
首先需要当前目录设置为仓库目录 一.创建本地分支 1.查看有哪些分支:git branch 2.创建一个分支:git branch name ,其中name是分支名 3.切换到分支:git chec ...
- sed 文件查找,替换
sed 命令查找与替换: (1)删除第2,3行:sed '2,3d' test.txt > new.txt (2)替换: 替换所有:sed 's/abc/ABC/' test.txt > ...
- HDU 1234 开门人和关门人
#include <string> #include <algorithm> #include <iostream> using namespace std; st ...
- rman备份优化思路
本章不讲rman备份原理.仅仅提供一些思路 1.oracle11g 选择压缩算法为中级: 2.添加rman备份的通道. 以上两种做法.添加CPU的利用率,降低IO 3.指定rate參数 这个rate和 ...