SDUT 小金防呀防不住_AK (水题)
来源:互联网 发布:js json数据导出excel 编辑:程序博客网 时间:2024/06/10 06:38
题目链接:
题目链接
(在重现比赛里,可能随时消失,题目也找不到,这里把题目描述发一下好了)
众所周知,C语言的学习是我们程序设计基础的重点和主要内容。
首先恭喜大家终于来到最后一道题目,那么我要告诉你这次的期末考试题目难度是从题目1到题目8依次递增的。
那么作为最后一道水题,它的存在意义当然是让15级的巨巨们好好动动脑子啦。
小金自从进了集训队,做了很多有关于逆序对的题目,他也很喜欢逆序对。介绍一下逆序对。逆序对就是在一个数组序列中的两个数x和y,但这两个数x和y可以算作一个逆序对的规则是x要大于y,但x的位置一定要在y的前面(即i < j && a[i] > a[j] )。
那么小金的问题来了,如果给定一个长度为n的序列,这n个数保证大于等于0且小于n,并且不会重复。那么小金给了你一个移动操作,你可以将这个序列的第一个数拿到序列的最后将序列变为一个新的序列,例如当n=10的时候,给定一个序列。
那么,所有可能通过移动得到的序列如下。
请你输出在所有可能出现的序列中逆序对的个数最小的是多少?
题目大意:
上面已经很详细了,这里不再啰嗦了。
解题过程:
- 一看到这样的题,就感觉不太对,果然打开status里面各种tle。
- 然后仔细想了下,利用了一次题目给的数据的特性,模拟移位过程。
- 感觉思路有了,不过还是超时。
- 然后想了想,是刚开始查找逆序对是O(n^2),然后又用了下特性,然后就AC了。 -
题目分析:
- 本题的重点是
- 如果给定一个长度为n的序列,这n个数保证大于等于0且小于n。
- 然后就是各种利用这个特性了,刚开始查找逆序对的时候,只需要知道他是第几小的数(由于题目数据的特性,所给的值即代表是第几小的数减一),假设这个数是k,这个数之前比他小的数是n,就可以计算出,那么这个数后面比他小的数有n-k个。
- 然后是模拟移位过程,因为把第一个移到最后一个,假设第一个数是k,那么把这个数拿走,那么就会少掉k个逆序对(因为它之后一定有k个比他小的数)。这个把这个数放到最后一个的时候,假设有n个数,同理可以推出一定增加了n-k-1个逆序对(这里不太理解的同学可以拿笔手动模拟几步)。 -
AC代码:
#include<iostream>#include<cstring>#include<algorithm>using namespace std;int main(){ string str; int n; while (cin >> n) { int num[112345], ans = 0; for (int i = 0; i < n; i++) { cin >> num[i]; ans += num[i]; for (int j = 0; j < i; j++) if (num[j] < num[i]) ans--; } int temp = ans; for (int i = 0; i < n; i++) { temp += n-num[i]-1; temp -= num[i]; if (temp < ans) ans = temp; } cout << ans << endl; }}
0 0
- SDUT 小金防呀防不住_AK (水题)
- 小金防呀防不住_AK
- 小金问呀问不会问题 (sdut oj)
- 小金掰呀掰不够玉米 (sdut oj)
- SDUT-3425 小金掰呀掰不够玉米
- SDUT 3548 疯狂的小金 (贪心) -- 解题报告
- SDUT 8600手机(水题)
- zzulioj 1788: 小金刚的宝藏 (01背包)
- ZZULIOJ 1788 小金刚的宝藏 (01背包)
- SDUT 3189 Reverse Rot(水题)
- SDUT Problem_5 二哥的狗(水题)
- sdut 2617 矩阵(sdut第五届校赛)
- 2014第十三届小金话筒奖比赛(简章)报名开始了
- 小金登陆游戏
- 小金的询问
- 小金学呀学不会英语
- 小金变呀变变变形记
- 小金转呀转不晕矩阵
- C函数重点------指针函数与函数指针【精华】
- 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)
- Hibernate-OpenSessionInView-session开启-关闭过滤器filter
- AJAX基础
- Android支持库版本不一致而出现的奇怪bug
- SDUT 小金防呀防不住_AK (水题)
- PE 110 Diophantine reciprocals II (数论:分式个数)(加强版)
- [008-Makefile-笔记] Makefile的隐含规则
- Spring集成redis(pipeline方式)
- 启动屏+功能引导页+BottomNavigationBar+Fragment
- linux重要目录说明
- C++类前置声明的两个用处
- Jmeter 录制脚本
- Hibernate二级缓存和查询缓存