博客
关于我
HDU 5500 Reorder the Books思维题
阅读量:634 次
发布时间:2019-03-14

本文共 2624 字,大约阅读时间需要 8 分钟。

dxy has a collection of a series of books called “The Stories of SDOI”,There are n(n≤19) books in this series.Every book has a number from 1 to n.

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.
Input
There are several testcases.
There is an positive integer T(T≤30) in the first line standing for the number of testcases.
For each testcase, there is an positive integer n in the first line standing for the number of books in this series.
Followed n positive integers separated by space standing for the order of the disordered books,the ith integer stands for the ith book’s number(from top to bottom).
Hint:
For the first testcase:Moving in the order of book3,book2,book1 ,(4,1,2,3)→(3,4,1,2)→(2,3,4,1)→(1,2,3,4),and this is the best way to reorder the books.
For the second testcase:It’s already ordered so there is no operation needed.
Output
For each testcase,output one line for an integer standing for the minimum steps Evensgn would use to reorder the books.
Sample Input
2
4
4 1 2 3
5
1 2 3 4 5
Sample Output
3
0

解题思路:题中给出n个1-n范围的不重复的数,要求把这些数字按要求排序(只能从数列中抽出一个数放到最前面)所需的最小步数,看案例可知是从小到大排序。

所以得出结论:从后往前找,求出不满足条件的书的个数,就是它的最小步数。这里注意只要满足从后往前递减,就相当于满足条件。

理由:

从最后一个数开始往前搜索n次,碰到a[i]==n 就把 n-- ,这样最后可以得到n就是不满足序列从后往前递减的个数,就是答案。
因为所有不满足从后往前递减的数应该被抽出放在最前面,但是什么时候抽出不重要,但题中要求最小步,所以先抽出大的数放在最前面(不然又构成逆序),依次抽出就满足序列要求,最小步就是不满足条件的数的个数。大家用例子试试。

#include
int main(){ int i,j,t,n,a[20]; scanf("%d",&t); while(t--) { int ans = 0,max; scanf("%d",&n); for(i=1; i<=n; ++i) scanf("%d",&a[i]); for(i=n; i>0; --i) if(a[i]==n) n--; ans = n; printf("%d\n",ans); } return 0;}/*解题思路:求得不满足排序条件的数的个数就是最小步*/

转载地址:http://fcxoz.baihongyu.com/

你可能感兴趣的文章
MYSQL语句。
查看>>
MySQL调优是程序员拿高薪的必备技能?
查看>>
MySQL调大sort_buffer_size,并发量一大,查询排序为啥又会变慢
查看>>
Mysql账号权限查询(grants)
查看>>
mysql转达梦7_达梦7的子查询分解示例说明
查看>>
MYSQL输入密码后闪退的解决方法
查看>>
MySQL迁移到达梦:如何轻松、高质量完成迁移任务
查看>>
mysql返回的时间和实际数据存储的时间有误差(java+mysql)
查看>>
mysql还有哪些自带的函数呢?别到处找了,看这个就够了。
查看>>
Mysql进入数据库
查看>>
mysql进阶 with-as 性能调优
查看>>
mysql进阶-查询优化-慢查询日志
查看>>
wargame narnia writeup
查看>>
MySQL进阶篇SQL优化(InnoDB锁问题排查与解决)
查看>>
Mysql进阶索引篇03——2个新特性,11+7条设计原则教你创建索引
查看>>
mysql远程连接设置
查看>>
MySql连接出现1251Client does not support authentication protocol requested by server解决方法
查看>>
Mysql连接时报时区错误
查看>>
MySql连接时提示:unknown Mysql server host
查看>>
MySQL连环炮,你扛得住嘛?
查看>>