题目链接:

hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5225

bc(中文):http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=580&pid=1002

题解:

数组a保存输入

考虑当前位i,对于1<=j<i,使得x[j]=a[j],对于第i位,枚举1<=x[i]<a[i],并且x[i]!=x[j](1<=j<i),这样,对于i<j<=n的部分,任意排列都是满足条件的

这样,我们每次计算逆序对可以分为三个部分:

1~i-1的贡献:

  计算出所有的a[j](即x[j])>a[k]的个数(1<=j<=i-1,j<k<=n)cnt1(可预处理出来)

第i位的贡献:

  计算出所有的x[i]>a[k] (i<k<=n) cnt2

由上面两部分得:1~i的贡献:cnt12 =(cnt1+cnt2)*(n-i)!

最后考虑i+1~n的逆序对:

  在后n-i个位置中,有一半的排列方式中,第j小的数在第k小的数(j>k)的前面。共有(n-i)!种排列方式,所以对于一对数,有(n-i)!/2种排列方式中是逆序对。共有(n-i)*(n-i-1)/2对数,所有这类逆序对共(n-i)*(n-i-1)*(n-i)!/4对。

  即cnt3=(n-i)*(n-i-1)*(n-i)!/4

综上:第i位的答案是cnt12+cnt3;

注意:

  cnt3=(n-i)*(n-i-1)*(n-i)!/4,这里的4要在取模之前处理掉!!!取模之前处理掉!!!取模之前处理掉!!!

  总共4天提交了11次,CE了2次,wa了6次,ac了3次,最后一次ac告诉我,三天前错的地方就只有一个!除4没有提前处理!!!

代码:

 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; const int maxn = + ;
const int mod = 1e9 + ;
typedef long long LL; int arr[maxn], used[maxn]; int n; LL cnt[maxn];
void pre_for_solve() {
memset(cnt, , sizeof(cnt));
for (int i = ; i <= n; i++) {
cnt[i] = cnt[i - ];
for (int j = i + ; j <= n; j++) {
if (arr[i]>arr[j]) cnt[i]++;
}
}
} LL fac[maxn], fac2[maxn];
void get_fac() {
memset(fac, , sizeof(fac));
memset(fac2, , sizeof(fac2));
//求1*3*4*...*n
fac[] = , fac[] = , fac[] = ;
for (int i = ; i < maxn; i++) {
fac[i] = fac[i - ] * i%mod;
}
//求1*2*3...*n
fac2[] = ;
for (int i = ; i<maxn; i++) {
fac2[i] = fac2[i - ] * i%mod;
}
} void init() {
memset(used, , sizeof(used));
} int main() {
get_fac();
while (scanf("%d", &n) == && n) {
init();
for (int i = ; i <= n; i++) scanf("%d", arr + i);
pre_for_solve();
LL ans = ;
for (int i = ; i <= n; i++) {
for (int x = ; x<arr[i]; x++) {
if (!used[x]) {
//cnt1
LL sum = cnt[i - ];
//cnt2
for (int xx = ; xx <= n; xx++) {
if (!used[xx] && x>xx) sum++;
}
//cnt12
sum = sum*fac2[n - i] % mod;
//cnt3
LL tmp = fac[n - i] * (n - i)*(n - i - ) / % mod;
//cnt12+cnt3
sum = (sum + tmp) % mod;
ans += sum;
ans %= mod;
}
}
used[arr[i]] = ;
}
printf("%lld\n", ans);
}
return ;
}

HDU 5225 枚举的更多相关文章

  1. hdu 5225 Tom and permutation(回溯)

    题目链接:hdu 5225 Tom and permutation #include <cstdio> #include <cstring> #include <algo ...

  2. hdu 4770(枚举 + dfs爆搜)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4770 思路:由于最多只有15个".",可以直接枚举放置的位置,然后判断是否能够全部 ...

  3. hdu 3006 枚举集合能够产生的全部并集的集合

    http://acm.hdu.edu.cn/showproblem.php? pid=3006 刚买的CHERRY键盘 手感真好 可惜不习惯 写代码老是打错.一个题写了一上午,都是各种按错键DEBUG ...

  4. hdu 5129 (枚举) The E-pang Palace

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5128. 给你n个点,问能否组成两个不相交的与坐标轴平行的矩形,能就输出两矩形的面积和,不能就输出一个字符串 ...

  5. hdu 4282 枚举,非二分

    http://acm.hdu.edu.cn/showproblem.php?pid=4282 对于方程X^Z + Y^Z + XYZ = K,已知K求此方程解的个数,其中要求X<Y,Z>1 ...

  6. hdu 4681(枚举+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路:首先预处理出串C在A,B中的所有的位置,然后从前向后求一次最长公共子序列,从后向前求一次最 ...

  7. hdu 4421(枚举+2-sat)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4421 思路:枚举32位bit,然后2-sat判断可行性,这里给出2-sat矛盾关系构图: 1.a&am ...

  8. HDU 5965 枚举模拟 + dp(?)

    ccpc合肥站的重现...一看就觉得是dp 然后强行搞出来一个转移方程 即 根据第i-1列的需求和i-1 i-2列的枚举摆放 可以得出i列摆放的种类..加了n多if语句...最后感觉怎么都能过了..然 ...

  9. hdu 5228 枚举

    题意:在前往ZJOI2015一试的路上,ZCC在同Fsygd打德州扑克时输光了所有的筹码.不过ZCC最近学会了一些黑技术.现在,他能够在游戏过程中更换任何他想要更换的牌.ZCC想要通过更换尽量少的牌得 ...

随机推荐

  1. jquery 60s倒计时

    前端开发中经常用到的发送按钮倒计时,每次都是重写,挺麻烦的,记录一下,以后直接来复制代码 <!DOCTYPE html> <html> <head> <met ...

  2. underscore.js常用方法整理(慢慢完善)

    整理自Underscore.js (1.8.3) 中文文档,http://www.css88.com/doc/underscore/ 1. extend _.extend() 复制对象中的所有属性到目 ...

  3. PHP && ,and ,||,or 的区别

    PHP中的逻辑“与”运算有两种形式:AND 和 &&,同样“或”运算也有OR和||两种形式. 如果是单独两个表达式参加的运算,两种形式的结果完全相同,例如 $a AND $b和$a & ...

  4. 十个常见的Java异常出现原因

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 1.NullPointerException 空指针异常,操 ...

  5. Find the Duplicate Number (寻找重复数字)

    对于一个长度为n+1的数组,其中每一个值的取值范围是[1,n],可以证明的是必然存在一个重复数字(抽屉原理),假设仅存在一个重复数字,找到他. 举例:输入:[1,3,4,2,1],输出:1 自己做的时 ...

  6. 20155323 2016-2017-2 《Java程序设计》第3周学习总结

    20155323 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 对象:对象具有状态和行为,对象是类的实例. 类:一个类可以被定义为描述行为的模板. ...

  7. 修改Tomcat控制台标题(转)

    转载地址:https://blog.csdn.net/chanryma/article/details/46930729 背景:用控制台方式启动Tomcat,控制台的标题默认是"Tomcat ...

  8. PyQt5 结合 matplotlib 时,如何显示其 NavigationToolbar

    本文目的:展示 PyQt5 结合 matplotlib 时,如何显示其 NavigationToolbar. 本人搜遍所有网络无果,没办法,查看PyQt5源代码,最终才搞明白...特此留记. 〇.Py ...

  9. 【LG3231】[HNOI2013]消毒

    题面 洛谷 题解 代码 \(100pts\) #include<iostream> #include<cstdio> #include<cstdlib> #incl ...

  10. rsync + inotify 数据实时同步

    一.rsync介绍 rsync英文全称为Remote synchronization,从软件的名称就可以看出来,Rsync具有可是本地和远程两台主机之间的数据快速复制同步镜像.远程备份的功能,这个功能 ...