题意:和上题基本一样,求至少k对a>b的方案数。不取模!!!


做k+1遍容斥就行了

高精度超强!!!几乎把所有的都用上了

然后,注意有负数,所以容斥的时候正负分别保存然后再一减就行了



~~这是我省选前最后一次写高精度了~~

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=205, B=1e4;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
} struct Big{
int a[120], n;
int& operator [](int x) {return a[x];}
Big():n(1) {memset(a, 0, sizeof(a));}
void ini(int x) {a[1]=x; n=1;}
}f[N][N], C[N][N], fac[N]; Big operator *(Big a, int b) {
int g=0;
for(int i=1; i<=a.n; i++)
g += a[i]*b, a[i] = g%B, g/=B;
if(g) a[++a.n] = g;
return a;
} Big operator *(Big a, Big b) {
Big c;
for(int i=1; i<=a.n; i++) {
int g=0;
for(int j=1; j<=b.n; j++)
g += c[i+j-1]+a[i]*b[j], c[i+j-1] = g%B, g/=B;
c[i+b.n] = g;
}
c.n = a.n + b.n;
while(c.n>1 && c[c.n]==0) c.n--;
return c;
} Big operator +(Big a, Big b) {
int g=0, n=max(a.n, b.n);
for(int i=1; i<=n; i++) {
g += i<=a.n ? a[i] : 0;
g += i<=b.n ? b[i] : 0;
a[i] = g%B, g/=B;
}
a.n = n;
if(g) a[++a.n] = g;
return a;
} Big operator -(Big a, Big b) {
for(int i=1; i<=b.n; i++) {
if(a[i]<b[i]) a[i]+=B, a[i+1]--;
a[i] -= b[i];
}
int p=b.n+1;
while(a[p]<0) a[p]+=B, a[++p]--;
while(a.n>1 && a[a.n]==0) a.n--;
return a;
} void Print(Big &a) {
printf("%d", a[a.n]);
for(int i=a.n-1; i>=1; i--) printf("%04d", a[i]);
} int n, k, a[N], b[N];
int g[N];
void dp() {
fac[0].ini(1);
for(int i=1; i<=n; i++) fac[i] = fac[i-1]*i;
C[0][0].ini(1);
for(int i=1; i<=n; i++) {
C[i][0].ini(1);
for(int j=1; j<=n; j++) C[i][j] = C[i-1][j] + C[i-1][j-1];
}
int now=0;
for(int i=1; i<=n; i++) {
while(now<n && a[i]>b[now+1]) now++;
g[i] = now;
}
for(int i=0; i<=n; i++) f[i][0].ini(1);
for(int i=1; i<=n; i++)
for(int j=1; j<=g[i]; j++) f[i][j] = f[i-1][j] + f[i-1][j-1]*(g[i]-j+1);// Print(f[i][j]), puts("");
}
int main() {
freopen("in","r",stdin);
n=read(); k=read();
for(int i=1; i<=n; i++) b[i]=read();
for(int i=1; i<=n; i++) a[i]=read();
sort(a+1, a+1+n); sort(b+1, b+1+n);
dp();
Big pos, neg, ans;
int kkk=k;
for(int k=0; k<=kkk; k++) { //printf("kkkkkk %d\n",k);
for(int i=k; i<=n; i++){ //printf("i %d\n",i);
Big t = fac[n-i] * f[n][i] * C[i][k]; //printf("t ");Print(t); puts("");
if((i-k)&1) neg = neg + t;
else pos = pos + t;
}
}
ans = pos - neg;
//printf("hi %d ",i),Print(ans), puts("");
Print(ans);
}

BZOJ 2024: [SHOI2009] 舞会 [容斥原理 高精度]的更多相关文章

  1. 【BZOJ 2024】 2024: [SHOI2009] 舞会 (容斥原理+高精度)

    2024: [SHOI2009] 舞会 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 368  Solved: 102 Description OIto ...

  2. [LuoguP2159][SHOI2009]舞会_动态规划_高精度_排列组合

    舞会 题目链接:https://www.luogu.org/problem/P2159 数据范围:略. 题解: 不会.... 看了题解觉得自己好傻逼啊

  3. 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]

    BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1655  Solved: 798[Submit][S ...

  4. BZOJ 1064 假面舞会(NOI2008) DFS判环

    此题,回想Sunshinezff学长给我们出的模拟题,原题啊有木有!!此处吐槽Sunshinezff爷出题不人道!! 不过也感谢Sunshinezff学长的帮助,我才能做出来.. 1064: [Noi ...

  5. bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)

    1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2384  Solved: 806[Submit][Sta ...

  6. BZOJ 1263: [SCOI2006]整数划分( 高精度 )

    yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了 ----------------------------------------------------- ...

  7. BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]

    4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...

  8. BZOJ 3771 Triple FFT+容斥原理

    解析: 这东西其实就是指数型母函数? 所以刚开始读入的值我们都把它前面的系数置为1. 然后其实就是个多项式乘法了. 最大范围显然是读入的值中的最大值乘三,对于本题的话是12W? 用FFT优化的话,达到 ...

  9. bzoj 2839 : 集合计数 容斥原理

    因为要在n个里面选k个,所以我们先枚举选的是哪$k$个,方案数为$C_{n}^k$ 确定选哪k个之后就需要算出集合交集正为好这$k$个的方案数,考虑用容斥原理. 我们还剩下$n-k$个元素,交集至少为 ...

随机推荐

  1. C语言单向链表

    1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中 ...

  2. SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解

    想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...

  3. Sass嵌套

    Sass 中还提供了选择器嵌套功能,但这也并不意味着你在 Sass 中的嵌套是无节制的,因为你嵌套的层级越深,编译出来的 CSS 代码的选择器层级将越深,这往往是大家不愿意看到的一点. 选择器嵌套为样 ...

  4. java序列化反序列化深入探究

    When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...

  5. linux安装navicat全程记录

    国庆期间自己在试着用linux(ubuntu),献上navicat安装方法,以及很多教程里没有写的一些小东西 step1: 去navicat官网下载安装包,网址:http://www.navicat. ...

  6. JAVA 一句话技巧

    1.拆分字符串 遇到特殊字符,比如:对‘$’符号,就应该使用‘\\$’,后总结可以加个方括号如 "[.]".2.遍历HASHMAP Iterator itr = map.keySe ...

  7. Css雪碧图

    Css雪碧图: CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分. 原理 ...

  8. intent详解(一)

    摘录自:http://blog.csdn.net/harvic880925/article/details/38399723 前言:通过重新翻看Android入门书籍,才发现原来自己露掉了那么多基础知 ...

  9. Do you know how many stuff inside your Google Account?

    My friend Sandy she wants me to do her a favor. She'd like to clear Hangouts chat history. I think s ...

  10. Nginx日志中的金矿 -- 好文收藏

    转:http://www.infoq.com/cn/articles/nignx-log-goldmine Nginx(读作Engine-X)是现在最流行的负载均衡和反向代理服务器之一.如果你是一名中 ...