【BZOJ 2024】 2024: [SHOI2009] 舞会 (容斥原理+高精度)
2024: [SHOI2009] 舞会
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 368 Solved: 102Description
OItown要举办了一年一度的超级舞会了,作为主办方的Constantine为了使今年的舞会规模空前,他邀请了许多他的好友和同学去。舞会那天,恰好来了n个男生n个女生。Constantine发现,一般情况下,舞伴之间,总是男伴总是比女伴长得高,不过,偶尔也是有特殊情况的。所以,Constantine现在想知道,如果把这2n个人恰好配成n对舞伴,有多少种搭配方法,而且他要求最多只有k对舞伴之间女伴比男伴高。现在,Constantine需要参加SHTSC的你帮助他算出这个答案,当然啦,他会先告诉你这2n个同学的身高。
Input
第一行:两个整数n、k,含义如问题中所示。 第2行到第n+1行:n个整数,表示n个男生的身高。第n+2行到第2n+1行:n个整数,表示n个女生的身高。表示身高的正整数,都不超过 。
Output
输出文件只有一个,即满足n对舞伴中最多只有k对舞伴之间女伴比男伴高的男女搭配方案数。
Sample Input
3 0
178
188
176
168
178
170Sample Output
4评分
如果你的输出文件与标准答案完全相符,你将获得该测试点的全部分数,否则得零分。N< = 200
K< = N
HINT
Source
【分析】
这题高精度真是太可爱了。【然后我才发现如今大概只有我这种傻逼才会用10进制的高精度,别人都是4位4位做的,搞的我RE,0msTLE,MLE都试了一通。。
然后就是,跟“已经没有什么好害怕了”无异,具体可以看那篇。
对于至多k,而不是恰好k,就分成恰好0+恰好1+。。。+恰好k就好了。
【再表示一下用结构体重载运算符写高精度真的好看很多】
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 210
#define Maxl 210
#define Mod 10000 int a[Maxn],b[Maxn],mx[Maxn]; struct hugeint
{
int w[Maxl],l;
hugeint() {memset(w,,sizeof(w));l=;}
friend hugeint operator + (hugeint x,hugeint y)
{
x.l=max(x.l,y.l);
for(int i=;i<=x.l;i++) x.w[i]=x.w[i]+y.w[i];
for(int i=;i<=x.l;i++) x.w[i+]+=x.w[i]/Mod,x.w[i]%=Mod;
while(x.w[x.l+]!=) x.w[x.l+]+=x.w[x.l+]/Mod,x.w[++x.l]%=Mod;
while(x.w[x.l]==&&x.l>) x.l--;
return x;
}
friend hugeint operator - (hugeint x,hugeint y)
{
for(int i=;i<=x.l;i++) x.w[i]=x.w[i]-y.w[i];
for(int i=;i<=x.l;i++) if(x.w[i]<) x.w[i]+=Mod,x.w[i+]--;
while(x.w[x.l]==&&x.l>) x.l--;
return x;
}
friend hugeint operator * (hugeint x,hugeint y)
{
hugeint ret;ret.l=x.l+y.l;
for(int i=;i<=x.l;i++) for(int j=;j<=y.l;j++) ret.w[i+j]+=x.w[i]*y.w[j];
for(int i=;i<=ret.l;i++) ret.w[i+]+=ret.w[i]/Mod,ret.w[i]%=Mod;
while(ret.w[ret.l+]!=) ret.w[ret.l+]+=ret.w[ret.l+]/Mod,ret.w[++ret.l]%=Mod;
while(ret.w[ret.l]==&&x.l>) ret.l--;
return ret;
}
friend hugeint operator * (hugeint x,int y)
{
for(int i=;i<=x.l;i++) x.w[i]*=y;
for(int i=;i<=x.l;i++) x.w[i+]+=x.w[i]/Mod,x.w[i]%=Mod;
while(x.w[x.l+]!=) x.w[x.l+]+=x.w[x.l+]/Mod,x.w[++x.l]%=Mod;
while(x.w[x.l]==&&x.l>) x.l--;
return x;
}
friend bool operator > (hugeint x,hugeint y)
{
if(x.l!=y.l) return x.l>y.l;
for(int i=x.l;i>=;i++)
{
if(x.w[i]!=y.w[i]) return x.w[i]>y.w[i];
}
}
};
hugeint f[][Maxn],c[Maxn][Maxn],fac[Maxn],g[Maxn];
void clear(hugeint &x) {memset(x.w,,sizeof(x.w));x.l=;} int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++) scanf("%d",&b[i]);
sort(a+,a++n);sort(b+,b++n);
mx[]=;
for(int i=;i<=n;i++)
{
mx[i]=mx[i-];
while(b[i]>a[mx[i]+]&&mx[i]<n) mx[i]++;
}
f[][].w[]=f[][].w[]=;
for(int i=;i<=n;i++)
{
int p=i&,pp=p^;
for(int j=;j<=i;j++)
{
f[p][j]=f[pp][j]+f[pp][j-]*max(mx[i]-j+,);
}
}
for(int i=;i<=n;i++) c[i][].w[]=;
for(int i=;i<=n;i++) for(int j=;j<=i;j++) c[i][j]=c[i-][j-]+c[i-][j];
hugeint a1,a2,ans;
fac[].w[]=;
for(int i=;i<=n;i++) fac[i]=fac[i-]*i;
for(int i=;i<=n;i++) g[i]=f[n&][i]*fac[n-i];
for(int i=;i<=k;i++)
{
clear(a1);clear(a2);
for(int j=n;j>=i;j--)
{
if((j-i)&) a2=a2+g[j]*c[j][i];
else a1=a1+g[j]*c[j][i];
if(a1>a2) {a1=a1-a2;clear(a2);}
}
ans=ans+(a1-a2);
}
printf("%d",ans.w[ans.l]);
for(int i=ans.l-;i>=;i--) printf("%04d",ans.w[i]);printf("\n");
return ;
}
2017-04-20 15:29:03
【BZOJ 2024】 2024: [SHOI2009] 舞会 (容斥原理+高精度)的更多相关文章
- BZOJ 2024: [SHOI2009] 舞会 [容斥原理 高精度]
题意:和上题基本一样,求至少k对a>b的方案数.不取模!!! 做k+1遍容斥就行了 高精度超强!!!几乎把所有的都用上了 然后,注意有负数,所以容斥的时候正负分别保存然后再一减就行了 这是我省选 ...
- [LuoguP2159][SHOI2009]舞会_动态规划_高精度_排列组合
舞会 题目链接:https://www.luogu.org/problem/P2159 数据范围:略. 题解: 不会.... 看了题解觉得自己好傻逼啊
- BZOJ 2440 完全平方数(莫比乌斯-容斥原理)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2440 题意:给定K.求不是完全平方数(这里1不算完全平方数)的倍数的数字组成的数字集合S ...
- bzoj 2656 [Zjoi2012]数列(sequence)(高精度)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2656 [题意] 计算大数递推式 [思路] 高精度 [代码] #include<c ...
- bzoj 3198 [Sdoi2013]spring(容斥原理+Hash)
Description Input Output Sample Input 3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6 Sample Output 2 HINT [ ...
- Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1747 Solved: 1015[Submit][Stat ...
- Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1774 Solved: 644[Submit][Status] ...
- bzoj 4819: [Sdoi2017]新生舞会
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...
- BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...
随机推荐
- VS调试程序快捷键和系统快捷键
调试程序快捷键 编译程序:F7 运行程序:ctrl + F5 打断点:F9 运行到断点位置:F5 单步执行:F10 单步进入函数:F11 结束调试:shift+F5 注释代码:ctrl+k,ctrl+ ...
- 获取Spring的ApplicationContext的几种方式
Application Context定义 简单来说就是Spring中的高级容器,可以获取容器中的各种bean组件,注册监听事件,加载资源文件等功能. 具体定义可以参考官网:https://sprin ...
- CSS浏览器兼容问题集-第三部分
FF与IE 1. Div居中问题 div设置 margin-left, margin-right 为 auto 时已经居中,IE 不行,IE需要设定body居中,首先在父级元素定义text-algin ...
- wepy 使用组件时一个注意事项。。。
组件传值prop 必须使用指定引用地址的数据 如果像下面这样 取为空shop 中的phone ,后续获取数据或就算 shop中有phone元素 子组件也无法获取到修改后的值 <template& ...
- 根据 plist 还原 图片
1. python 环境自己配置(支持windows Mac ) 2. 把所有的 plist 和 大图片放到一个目录下 3.如果添加了 系统环境变量 就直接双击运行脚本,如果没有设置,把脚本拽到DO ...
- nginx配置不当导致的目录遍历下载漏洞-“百度杯”CTF比赛 2017 二月场
题目:http://98fe42cede6c4f1c9ec3f55c0f542d06b680d580b5bf41d4.game.ichunqiu.com/login.php 题目内容: 网站要上线了, ...
- vue头像上传
项目四知识点 默认头像 选择头像 <template> <div class="adatar"> <img :src="adatar?ada ...
- scikit-learn模块学习笔记(数据预处理模块preprocessing)
本篇文章主要简单介绍sklearn中的数据预处理preprocessing模块,它可以对数据进行标准化.preprocessing 模块提供了数据预处理函数和预处理类,预处理类主要是为了方便添加到pi ...
- ActiveMQ-如何使用JMS API?
JMS编程模型 JMS定义了Java中访问消息中间件的一组接口,主要包括ConnectionFactory.Connection.Session.Destination.MessageProducer ...
- inux命令英文缩写的含义(方便记忆) 2
linux常用命令的英文单词缩写 命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户rpm:redhat packa ...