杭电ACM1394——Minimum Inversion Number
2015-08-07 22:38
246 查看
题目的意思:给你一个数组,求最小的Inversion Number。所谓的Inversion Number是 数组中 i < j && a[ i ] > a[ j ] 的对数。数组可以滚动,也就是相当于环状的,每一个数都可以当作起始位置。
这题,暴力可以直接过,接近300MS。
下面的是AC的代码:
这题,暴力可以直接过,接近300MS。
下面的是AC的代码:
#include <iostream> #include <cstring> using namespace std; int D[5005]; int main() { int n, i, j, ans, res; while(cin >> n) { res = 0; for(i = 0; i < n; i++) cin >> D[i]; for(i = 0; i < n - 1; i++) { ans = 0; for(j = i + 1; j < n; j++) { if(D[i] > D[j]) ans++; } res += ans; } //算出一开始的数组的最小的Inversion Number数。 int min = res; for(i = 0; i < n; i++) { res = res - D[i] + (n - 1) - D[i]; //因为数组中的数是0~n - 1的。 if(min > res) //所以将第一个放在数组末,Inversion Number的个数就是 min = res; //相当于减掉D【i】(有D【i】个比它本身大的数), } //同理加上(n-1)-D【i】 cout << min << endl; } return 0; }
相关文章推荐
- 【从头开始写操作系统系列】实现一个-GDT(2)
- poj 1961 Period【求前缀的长度,以及其中最小循环节的循环次数】
- Scrapy 学习笔记(一)
- 三分法
- 线段树 入门总结 hdu 1754 1161
- 仿射集合凸集
- ExtJS操作数据时的等待界面
- 二分法
- linux下如何修改iptables开启80端口(2)
- 20、C语言和设计模式(观察者模式)
- 文章标题
- C++STL之迭代器
- Block 原理详解
- 19、C语言和设计模式(桥接模式)
- 在同一台电脑上使用两个github账户
- 二叉搜索树与双向链表
- CGI和CLI两种模式运行PHP的区别
- hibernate.cfg.xml配置文件和hbm.xml配置文件 模板
- OC循环渐进:时间格式化
- leetcode 83: Remove Duplicates from Sorted List