poj 1007 分治求逆序对
2012-07-26 02:50
579 查看
题目大意:给出一组字符串,给这组字符串按逆序对数从小到大排列。
解题思路:按分治类似归并排序算法求出每个字符串的逆序对数,在用快速排序排列
求逆序对数类似poj 2299题
/article/3677988.html
这里注意的是当逆序数相同时,按照字符串原先的相对位置输出。
解题思路:按分治类似归并排序算法求出每个字符串的逆序对数,在用快速排序排列
求逆序对数类似poj 2299题
/article/3677988.html
这里注意的是当逆序数相同时,按照字符串原先的相对位置输出。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; struct node { int index; int value; }; const int maxn = 51; const int maxm = 101; char str[maxm][maxn], t[maxn], tmp[maxn]; node result[maxm]; int n, m; int merge(char *s, int low, int high); inline bool cmp(const node &a, const node &b) { if(a.value == b.value) return a.index < b.index; return a.value < b.value; } int main() { scanf("%d %d", &m, &n); for(int i = 0; i < n; i++) { scanf("%s", str[i]); strcpy(t, str[i]); result[i].value = merge(t, 0, m - 1); result[i].index = i; } sort(result, result + n, cmp); for(int i = 0; i < n; i++) printf("%s\n", str[result[i].index]); return 0; } int merge(char *s, int low, int high) { int su = 0; if(low < high) { int k = 0; int mid = (low + high) >> 1; su += merge(s, low, mid); su += merge(s, mid + 1, high); int i, j; for(i = low, j = mid + 1; i <= mid && j <= high; ) { if(s[i] > s[j]) tmp[k++] = s[j++]; else { su += j - mid - 1; tmp[k++] = s[i++]; } } while(i <= mid) { tmp[k++] = s[i++]; su += j - mid - 1; } while(j <= high) { tmp[k++] = s[j++]; } i = low, j = 0; while(j < k) s[i++] = tmp[j++]; } return su; }
相关文章推荐
- POJ 1007 DNA排序求逆序数
- 总结: 求逆序对 递归分治(与poj 22…
- POJ 1007 DNA排序求逆序数
- poj 2299/2188 求逆序数个数(分治or线段树\树状数组)
- POJ 1804 逆序对问题【分治】【线段树】【树状数组】【平衡树】
- POJ 1804 Brainman 分治排序求逆序对
- poj 1007 DNA Sorting【逆序对】
- POJ 1007(求逆序对数)
- POJ-1007-DNA Sorting-求逆序数
- POJ 1007 DNA Sorting【求逆序数】
- POJ 2299 Ultra-QuickSort(逆序数、分治)
- POJ 1007 DNA sorting(统计逆序对数+归并排序)
- 【原】 POJ 1007 DNA Sorting 逆序数 解题报告
- (使用排序算法进行编程7.3.11)POJ 1007 DNA Sorting(使用冒泡排序算法来计算逆序对)
- POJ[2299]Ultra-QuickSort 逆序对:线段树||树状数组||分治
- poj 1007 求逆序数
- poj 1007:DNA Sorting(水题,字符串逆序数排序)
- poj 1007 Quoit Design(分治)
- poj 1007 Quoit Design(分治)
- poj 1007 逆序问题