题目:http://acm.hdu.edu.cn/showproblem.php?pid=2443

这个题目尝试了很多种方法都过不去,上网查了一下网友们的的思路,竟然和逆序对数有关系!!

题目大意:

有n个士兵,他们都有各自的分数,有一项任务需要完成,为了能够确保合作更默契,他们的分数要差不多,所以有一个水平控制即平均数,所选的一组士兵的平均成绩必须大于该平均数。

问一共能选出多少组士兵能够完成该项任务?

思路:

求逆序对数。归并排序可以用来求逆序对数,这个没毛病。

代码如下:

 #include<iostream>
#include<cstring>
using namespace std;
void combine_sortd_list(int* to, int* sub1, int sz1, int* sub2, int sz2);
void merge_sort(int* lst, int sz);
const int MAX = 1e5 + ;
int arr[MAX];
long long int ans;
int main()
{
int Group, N, A;
cin >> Group;
while (Group--)
{
memset(arr, , sizeof arr);
cin >> N >> A;
for (int j, i = N-; i >=; --i)
{
cin >> j;
arr[i] = j - A + arr[i + ];
}
ans = ;
merge_sort(arr, N + ); //归并求逆序数
cout << ans << endl;
}
}
void merge_sort(int* lst, int sz)
{
static int tmp[MAX];
if (sz <= )return;
int* l = lst;
int lsz = (sz + ) / ;
int* r = l + lsz;
int rsz = sz / ;
merge_sort(l, lsz);
merge_sort(r, rsz);
combine_sortd_list(tmp, l, lsz, r, rsz);
for (int i = ; i < sz; ++i)lst[i] = tmp[i];
}
void combine_sortd_list(int*to, int* sub1, int sz1, int* sub2, int sz2)
{
int i = , j = , k = ;
while (i < sz1&&j < sz2)
if (sub1[i] <= sub2[j])to[k++] = sub1[i++];
else
{
ans += sz1 - i;
to[k++] = sub2[j++];
}
while (i < sz1)to[k++] = sub1[i++];
while (j < sz2)to[k++] = sub2[j++];
}

由公式推导解析题目意图:http://blog.csdn.net/scorpiocj/article/details/6227528

感谢您的阅读,生活愉快~

Counter Strike HDU 2443 逆序对数的更多相关文章

  1. POJ 1840 Brainman(逆序对数)

    题目链接:http://poj.org/problem?id=1804 题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列. 思路:题目就是要求逆序对数,我们知 ...

  2. POJ 2299 Ultra-QuickSort (求序列的逆序对数)

    题意:废话了一大堆就是要你去求一个序列冒泡排序所需的交换的次数. 思路:实际上是要你去求一个序列的逆序队数 看案例: 9 1 0 5 4 9后面比它小的的数有4个 1后面有1个 0后面没有 5后面1个 ...

  3. Ultra-QuickSort(树状数组求逆序对数)

    Ultra-QuickSort 题目链接:http://poj.org/problem?id=2299 Time Limit: 7000MS   Memory Limit: 65536K Total ...

  4. 怎样求逆序对数(Inverse Number)?

    #返回上一级 @Author: 张海拔 @Update: 2014-01-14 @Link: http://www.cnblogs.com/zhanghaiba/p/3520089.html /* * ...

  5. 给出一列数a1,a2,a3....an,求它们的逆序对数,即有多少个有序对(i,j) 使得iaj,n高达10的6次方

    //归并排序 //#include<stdio.h> //#include<string.h> //#include<algorithm> //#include&l ...

  6. BZOJ - 3744 Gty的妹子序列 (区间逆序对数,分块)

    题目链接 静态区间逆序对数查询,这道题用线段树貌似不好做,可以把区间分成$\sqrt n$块,预处理出两个数组:$sum[i][j]$和$inv[i][j]$,$sum[i][j]$表示前i个块中小于 ...

  7. Time Limit Exceeded 求逆序对数。

    /** 题目:Time Limit Exceeded 链接:https://oj.ejq.me/problem/28 题意:求逆序对数. 思路:树状数组求逆序对数.维护前面有多少个<=当前数的数 ...

  8. 用树状数组求逆序对数(poj2299)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 46995   Accepted: 17168 ...

  9. hdu 4911 Inversion(归并排序求逆序对数)2014多校训练第5场

    Inversion                                                                             Time Limit: 20 ...

随机推荐

  1. BZOJ1822 Frozen Nova 冷冻波

    1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec  Memory Limit: 64 MB Description WJJ喜欢“魔兽争霸”这个游戏. ...

  2. HDU 4690 EBCDIC 2013 Multi-University Training Contest 9

    解题报告:一个模拟题,有两张表格,然后输入一个字符在第一章表格中的位置,让你找出这个字符在第二章表对应的位置. 我欧诺个的是暴力打表,输了两百多个数字,时间复杂度直接降到O(1),这题觉得比较坑的就是 ...

  3. 37、使用FileInputStream和FileOutputStream读取和写入

    绝对路径和相对路径 绝对路径:指文件在硬盘上真正存在的路径,比如:D:\Java\HelloWorld.java,这个指的是在电脑的d盘下的Java文件夹里面有个HelloWorld.java文件 相 ...

  4. jquery $.post() 向php传值 实现简单的二级联动

    更多内容推荐微信公众号,欢迎关注: 1 其中selectid是一个下拉菜单的id $().ready(function () { $("#selectid").change(fun ...

  5. CSS line-height应用

    一.固定高度的容器,单行文本垂直居中 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf- ...

  6. 高级C#信使(译) - Unity维基百科

    高级C#信使 作者:Ilya Suzdalnitski 译自:http://wiki.unity3d.com/index.php/Advanced_CSharp_Messenger 描述 前言 Mis ...

  7. 个性化你的Git Log的输出格式

    git已经变成了很多程序员日常工具之一. git log是查看git历史的好工具,不过默认的格式并不是特别的直观. 很多时候想要更简便的输出更多或者更少的信息,这里列出几个git log的format ...

  8. 说一下怎么搭建外网来访问SVN服务器

    一.搭建SVN服务器 1.所需软件 TortoiseSVN,下载地址http://tortoisesvn.net/downloads.html TortoiseSVN中文语言包,下载地址http:// ...

  9. 从源码层次分析asterisk如何产生呼叫

    老规矩,看别人是怎么搞的 http://blog.chinaunix.net/uid-14723273-id-1739552.html over...

  10. 洛谷P1491集合位置

    传送门啦 这个题说白了就是求一个次短路. 方法是我们先跑一遍最短路,记录下最短路上每一个点的前驱.然后我们将最短路上每一条边都标记一次,分别跑一边最短路,求出最短路径即可. 在这我们不用特殊判断是否是 ...