BestCoder Round #59 (div.2) HDU5500 Reorder the Books
来源:互联网 发布:大数据广告精准投放 编辑:程序博客网 时间:2024/05/20 00:16
Reorder the Books
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 272 Accepted Submission(s): 186
dxy puts these books in a book stack with the order of their numbers increasing from top to bottom. dxy takes great care of these books and no one is allowed to touch them.
One day Evensgn visited dxy's home, because dxy was dating with his girlfriend, dxy let Evensgn stay at home himself. Evensgn was curious about this series of books.So he took a look at them. He found out there was a story about "Little E&Little Q". While losing himself in the story,he disrupted the order of the books.
Knowing that dxy would be back soon,Evensgn needed to get the books ordered again.But because the books were too heavy.The only thing Evensgn could do was to take out a book from the book stack and and put it at the stack top.
Give you the order of the disordered books.Could you calculate the minimum steps Evensgn would use to reorder the books? If you could solve the problem for him,he will give you a signed book "The Stories of SDOI 9: The Story of Little E" as a gift.
There is an positive integer
For each testcase, there is an positive integer
Followed
Hint:
For the first testcase:Moving in the order of
For the second testcase:It's already ordered so there is no operation needed.
244 1 2 351 2 3 4 5
30
出题人:
把这题的模型简化一下,有一个1→n的排列形成的数列,我们要用最少的操作次数把这个数列排序,
每次操作都是把一个数放到整个数列的最前面。 首先我们可以注意到每个数最多只会被操作一次。
因为假如有一个数被往前拿了两次,显然第一次的操作是没有意义的。 然后能发现一定先操作大的数,
再操作小的数。因为假如先把小的数放前面去了,再把大的数放前面去,小的数就又在大的数后面了,
小的数必定还得再操作一次,然而操作两次是不划算的。
到这里,对于19的数据范围,我们有一个很暴力的做法,2n枚举要操作哪些数,这些操作按数的大小
从大往小的顺序,模拟一下,然后检查一下最后的序列是否有序,复杂度O(n∗2n)。
我们很快又能发现,假如操作了大小等于k的数,那么所有小于k的数也都得操作了。所以我们不用2^n枚举,
直接m从1开始从小到大枚举,表示要操作前m小的数,然后模拟,验证,这样复杂度为O(n2)。
不过其实m也是不用枚举的。 首先可以发现最大的数n是不用操作的(其他数操作好了,数"n"自然就在最后面了)。
于是我们先找到最大的数"n"的位置,从这个位置往前找,直到找到(n−1)。假如找到头也没找到(n−1),
那么数"(n−1)"需要操作,而一旦操作了(n−1),根据前面结论,总共就需要(n−1)次操作了;
假如找到了(n-1),那么数"(n−1)"也不需要操作(和数"n"不需要操作一个道理)。
同理,我们接着从(n−1)的位置往前找(n−2),再从(n−2)的位置往前找(n−3)...假如数k找不到了,
那么就至少需要k次操作。这种做法的复杂度是O(n)的
找一个最大的值( a[j] ) 使得该值比前面的一个值小( a[i] ), i<j ,a[j]<a[j] 。
- BestCoder Round #59 (div.2) HDU5500 Reorder the Books
- BestCoder Round #59 (div.2) 1002 Reorder the Books
- BestCoder Round #59 (div.2)B.Reorder the Books
- hdu5500--Reorder the Books
- hdu5500 Reorder the Books
- hdu5500 Reorder the Books
- BestCoder Round #59 Reorder the Books
- hdu 5500 Reorder the Books 【BestCoder Round #59 (div.2) 第二题】
- hdu5500 Reorder the Books 贪心
- HDU 5500 Reorder the Books(O(n)的复杂度就够了)——BestCoder Round #59(div.1 div.2)
- hdu5500 Reorder the Books (枚举+模拟)
- HDU5500 Reorder the Books(脑洞?)
- hdu1097 A hard puzzle hdu5500 Reorder the Books
- BC#59 Reorder the Books
- BestCoder Round #59 (div.2)
- BestCoder Round #59 (div.2)
- #BestCoder Round #59 (div.2)
- BestCoder Round #59 (div.2)
- Eclipse 中常用的快捷键
- android中的空格编码 string.xml前后加空格的技巧
- 栈(stack)
- 机房收费系统文档(二)项目开发计划
- 数据结构_线性结构_栈与队列
- BestCoder Round #59 (div.2) HDU5500 Reorder the Books
- Android中padding和margin的理解
- hdu5501 The Highest Mark 贪心+动态规划
- Coursera,Udacity,Edx 课程列表(更新ing)
- 黑马程序员-多线程部分(一.创建)
- 关于UITextView的几种回收键盘的方法
- 升级Xcode之后插件不能
- 数据结构_线性结构_栈与队列
- iOS 动画基础