[SHOI2009] 舞会
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个女生的身高。表示身高的正整数,都不超过 。
N< = 200
K< = N
Output
即满足n对舞伴中最多只有k对舞伴之间女伴比男伴高的男女搭配方案数。
Sample Input
3 0
178
188
176
168
178
170
Sample Output
4
Sol:
将最多有K种情况转化成正好1种,正好2种...正好K种
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 205
#define LL long long
using namespace std;
const int bit = 100000000, wei = 8;
int n,m,a[maxn],b[maxn];
struct Big
{
LL s[105];
int len;
Big(){memset(s,0,sizeof s);len=0;}
void print(){
if(!len) {putchar('0');return;}
printf("%lld",s[len-1]);
for(int i=len-2;i>=0;i--) printf("%08lld",s[i]);
}
Big operator + (const Big &B)
{
Big c;c.len=max(len,B.len);
for(int i=0;i<c.len;i++){
c.s[i]+=s[i]+B.s[i];
if(c.s[i]>=bit) c.s[i+1]++,c.s[i]-=bit;
}
if(c.s[c.len]) c.len++;
return c;
}
Big operator - (const Big &B)
{
Big c;c.len=max(len,B.len);
for(int i=0;i<c.len;i++){
c.s[i]+=s[i]-B.s[i];
if(c.s[i]<0) c.s[i+1]--,c.s[i]+=bit;
}
while(!c.s[c.len-1]&&c.len) c.len--;
return c;
}
Big operator * (const Big &B)
{
Big c;c.len=len+B.len;
for(int i=0;i<len;i++) if(s[i])
for(int j=0;j<B.len;j++) if(B.s[j]){
c.s[i+j]+=s[i]*B.s[j];
if(c.s[i+j]>=bit) c.s[i+j+1]+=c.s[i+j]/bit,c.s[i+j]%=bit;
}
while(!c.s[c.len-1]&&c.len) c.len--;
return c;
}
void operator = (int x){while(x) s[len++]=x%bit,x/=bit;}
Big operator * (const int &x){Big B;B=x;return *this*B;}
}f[2][maxn],one,c[maxn][maxn],fac[maxn];
int main()
{
scanf("%d%d",&n,&m);
one=1;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
sort(a+1,a+1+n),sort(b+1,b+1+n);
int now=0;f[now][0]=one;
for(int i=1,p=0;i<=n;i++,now=!now)
{
while(p<n&&b[i]>a[p+1]) p++;
f[!now][0]=f[now][0];
for(int j=1;j<=p;j++) f[!now][j]=f[now][j]+f[now][j-1]*(p-(j-1));
}
fac[0]=one;for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i;
c[0][0]=one;
for(int i=1;i<=n;i++){
c[i][0]=c[i][i]=one;
for(int j=1;j<i;j++) c[i][j]=c[i-1][j-1]+c[i-1][j];
}
for(int i=0;i<=n;i++)
f[now][i]=f[now][i]*fac[n-i];//至少
for(int i=n;i>=0;i--)
for(int j=i+1;j<=n;j++)
f[now][i]=f[now][i]-c[j][i]*f[now][j];//恰好
Big ans;
for(int i=0;i<=m;i++)
ans=ans+f[now][i];
ans.print();
}
[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 2024: [SHOI2009] 舞会 [容斥原理 高精度]
题意:和上题基本一样,求至少k对a>b的方案数.不取模!!! 做k+1遍容斥就行了 高精度超强!!!几乎把所有的都用上了 然后,注意有负数,所以容斥的时候正负分别保存然后再一减就行了 这是我省选 ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- tyvj1192 迎春舞会之集体舞
背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 描述 表演者排成n排,构成一个向前的正三角形(在屏幕上,即向下).而就每个人,他有可能正面朝前(小的向前正三角形).或向后三角形(小的向后正 ...
- tyvj1294 小v的舞会
背景 "梦中伊人,断我男儿几寸柔肠,于断桥,不知西风自憔悴那姑娘."小v的梦中伊人要带领一大帮姐妹MM们来小v家举办舞会,然而怎么安排跳舞的顺序成了大问题,你能帮他么? 描述 有n ...
随机推荐
- C++使用socket传输图片
Client: #include <WinSock2.h> #include <Windows.h> #include <stdio.h> #pragma comm ...
- Java 工厂方法模式的简单示例
工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象. 目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究 ...
- Dubbo配置文件详解
为新项目练手,把项目中用到的web service.RMI的服务改用Dubbo+Zookeeper+Spring,网上找到几篇不错的配置详解 1.此篇博文主要从以下几种配置方式来讲 XML 配置文件方 ...
- vue-router嵌套路由,二级路由。
如果全是用一级路由时,路由管理就变得很臃肿,有点乱,路由有父子关系的话,嵌套路由会更好.嵌套也就是路由中的路由的意思,组件中可以有自己的路由导航和路由容器(router-link.router-vie ...
- 【leetcode】1248. Count Number of Nice Subarrays
题目如下: Given an array of integers nums and an integer k. A subarray is called nice if there are k odd ...
- k8s-insight测试
eureka apiVersion: v1 kind: Pod metadata: name: eureka labels: ccb: eureka spec: containers: - name: ...
- MySQL的字符集操作命令总结
这篇文章主要介绍了MySQL的字符集操作命令总结,包括各种查看数据库.数据表等查询命令,需要的朋友可以参考下 以下均在mysql 5.5命令行中运行通过: 查看MySQL支持的字符集: 代码如下: ...
- Redis Cluster in Ubuntu
1. 首先,进到Redis-server 的位置,确认 Redis server 可以正常启动 2. 在 redis-5.0.3 目录下创建文件夹 redisCluster_Demo_byMe,并在 ...
- linux监控系统性能命令
Linux系统性能10条命令监控 https://www.cnblogs.com/qmfsun/p/5729442.html 概述 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. ...
- Golang Singleton
package example import ( "fmt" "sync") var m *singletonvar once sync.Once func G ...