BZOJ 2024: [SHOI2009] 舞会 [容斥原理 高精度]
题意:和上题基本一样,求至少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] 舞会 [容斥原理 高精度]的更多相关文章
- 【BZOJ 2024】 2024: [SHOI2009] 舞会 (容斥原理+高精度)
2024: [SHOI2009] 舞会 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 368 Solved: 102 Description OIto ...
- [LuoguP2159][SHOI2009]舞会_动态规划_高精度_排列组合
舞会 题目链接:https://www.luogu.org/problem/P2159 数据范围:略. 题解: 不会.... 看了题解觉得自己好傻逼啊
- 图论 公约数 找环和链 BZOJ [NOI2008 假面舞会]
BZOJ 1064: [Noi2008]假面舞会 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1655 Solved: 798[Submit][S ...
- BZOJ 1064 假面舞会(NOI2008) DFS判环
此题,回想Sunshinezff学长给我们出的模拟题,原题啊有木有!!此处吐槽Sunshinezff爷出题不人道!! 不过也感谢Sunshinezff学长的帮助,我才能做出来.. 1064: [Noi ...
- bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2384 Solved: 806[Submit][Sta ...
- BZOJ 1263: [SCOI2006]整数划分( 高精度 )
yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了 ----------------------------------------------------- ...
- BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]
4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...
- BZOJ 3771 Triple FFT+容斥原理
解析: 这东西其实就是指数型母函数? 所以刚开始读入的值我们都把它前面的系数置为1. 然后其实就是个多项式乘法了. 最大范围显然是读入的值中的最大值乘三,对于本题的话是12W? 用FFT优化的话,达到 ...
- bzoj 2839 : 集合计数 容斥原理
因为要在n个里面选k个,所以我们先枚举选的是哪$k$个,方案数为$C_{n}^k$ 确定选哪k个之后就需要算出集合交集正为好这$k$个的方案数,考虑用容斥原理. 我们还剩下$n-k$个元素,交集至少为 ...
随机推荐
- c++(hash表)
hash表,有时候也被称为散列表.个人认为,hash表是介于链表和二叉树之间的一种中间结构.链表使用十分方便,但是数据查找十分麻烦:二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果.hash ...
- cookie 和 session的区别
一.总结: 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用ses ...
- [国嵌笔记][011][Linux密码破解]
破解步骤 1.在系统启动时进入grub选项菜单 2.在grub选项菜单中按e进入编辑模式 3.编辑kernel行,添加 /init 1 (表示进入单用户启动模式,在单用户启动模式中不会要求输入密码) ...
- POJ 1502 MPI Maelstrom(模板题——Floyd算法)
题目: BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distri ...
- A glance at endpoint security
Last year hackers stole millions from Taiwan First Commercial bank's ATMs without using a card. This ...
- mdb文件怎么打开
(一)mdb格式的文件可以用MS Access打开编辑,也可以用Excel打开只能浏览. (二)mdb是什么文件格式 就像word的doc文件格式,mdb文件格式是Access数据库文件,微软Off ...
- J.U.C FutureTask之源码解析
通过直接继承Thread, 实现Runnable接口来创建线程.但这两种方式都有一种缺陷:在执行完任务之后无法获得执行结果. 如果需要获得执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果, ...
- Linux IO时事检测工具iostat
Linux IO时事检测工具iostat iostat命令用于检测linux系统io设备的负载情况,运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间来获得所需的统 ...
- Jquery如何删除table里面checkbox选中的多个行
思路:遍历被选中的checkbox对象→根据选中项筛选出需要删除的行→删除行.实例说明如下: 1.HTML结构 <table id = "test_table"> &l ...
- __new__、__init__、__call__三个特殊方法
用双下划线包围的特殊方法在Python中又被成为魔术方法,类似于C++等语言中的构造函数,这里我们就来详解Python中的__new__.__init__.__call__三个特殊方法: 1.__ne ...