题意:和上题基本一样,求至少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. jsp/servlet相关技术及知识

    JSP页面的内容由两部分组成: 静态部分:标准的HTML标签.静态的页面内容, 动态部分:受Java程序控制的内容,这些都由java语言动态生成 简单的jsp页面代码: <%@ page lan ...

  2. 94、存储库之MongoDB、mysql

    本篇导航: 简介 MongoDB基础知识 安装 基本数据类型 CRUD操作 其它 存储库之mysql   一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是 ...

  3. Dockerfile中CMD和ENTRYPOINT的区别

    当启动一个容器时,CMD和ENTRYPOINT都可以用来执行启动命令.但它们的具体用法还是有一些区别: 1. Dockerfile必须至少指定CMD或者ENTRYPOINT其中的一个. 2. ENTR ...

  4. [国嵌攻略][099][Linux内核配置与编译]

    为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...

  5. js BOM DOM

    BOM对象 BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执行其他与页面内容不直接相关的动作. 简而言之就是使 JavaScript ...

  6. Oracle:FOR循环语句练习

    --打印输出从1到10的正整数DECLARE v_i NUMBER(10) := 0;BEGIN LOOP v_i := v_i + 1; DBMS_OUTPUT.put_line(v_i); EXI ...

  7. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  8. 单独编译IMX6Q的VPU示例程序:mxc_vpu_test.out

    mxc_vpu_test.out是飞思卡尔为IMX6Q编写的VPU示例程序,有编解码和简单的网络传输功能. 首先从/opt/freescale/pkgs/中提取出imx-test-3.0.35-4.1 ...

  9. Docker镜像导致centos-root根分区容量爆满

    当虚拟机服务器运行Docker久了后,发现Docker的文件越来越大,某天发现此台机上的数据库访问不了了,再重启数据库等日志,提示空间不足,查看磁盘空间: root分区满载啊,前段时间还有不少空间的, ...

  10. ArcGIS字段计算器分割字段中的字符串

    ArcGIS字段计算器分割字段中的字符串 实例:在一个字段中存有长宽高三个属性数据,以x分割.例如sss为字段名(字段属性为文本类型),数据格式为:100x200x300,利用字段计算器分别将三个数存 ...