[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 ...
随机推荐
- GoAccess安装及分析nginx实时日志
GoAccess是一个基于终端的快速日志分析器.其核心思想是实时快速分析和查看Web服务器统计信息,而无需使用您的浏览器(如果您希望通过SSH快速分析访问日志,或者只是喜欢在终端中工作),终端输出是默 ...
- BZOJ1013 [JSOI2008]球形空间产生器sphere[高消]
数论进度开的好慢啊.我整天做的都是什么鬼题啊. 简单的高消题,用一个式子把另外$n$个有二次项和距离的式子全消掉就行了. #include<iostream> #include<cs ...
- P1081 [NOIP2012]开车旅行[倍增]
P1081 开车旅行 题面较为啰嗦.大概概括:一个数列,只能从一个点向后走,两种方案:A.走到和自己差的绝对值次小的点B.走到和自己差的绝对值最小点:花费为此差绝对值:若干询问从规定点向后最多花 ...
- DevExpress ASP.NET v19.1版本亮点:Pivot Grid等控件
行业领先的.NET界面控件DevExpress 发布了v19.1版本,本文将以系列文章的方式为大家介绍DevExpress ASP.NET Controls v19.1中新增的一些控件及增强的控件功能 ...
- 2017 趋势科技 研发4.26(offer)
南京趋势科技外企(offer) 笔试 在华科线下笔试的,推荐多参加线下笔试,因为相对难度会低一些,好进一些. 当时笔试的估计只有60几个,然后选择题感觉有的不会,编程简单. 第二天去面试的时候,hr小 ...
- 2017 网易游戏互娱游戏研发4.21(offer)
网易游戏互娱(offer) 去年这个时候就参加过网易游戏的实习生招聘,到今年总共收到了4次拒信.不过这次运气好,终于get了最想要的offer.去年实习生互娱笔试挂,秋招笔试挂,今年春招互娱投了连笔试 ...
- 【leetcode】1259.Handshakes That Don't Cross
题目如下: 解题思路:动态规划.记dp[i] = v表示由i个人组成的圈子一共有v种握手的方法.对于一个由n个人组成的圈子,编号为0的人一共可以和编号为 (1,3,5....,n-1)的握手,这也很好 ...
- vs2017 mvc 自定义路由规则 出现 404.0 错误代码 0x80070002
自定义: WebApiConfig 里面最后增加 config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttp ...
- 关于python-selenium-chromedriver提示
问题一:AttributeError: module 'selenium.webdriver' has no attribute 'Chromedriver' 配置selenium环境时,执行代码 f ...
- “==”与equals方法
“==”操作符 基本类型比较值:判断两个变量的值相等. 引用类型比较引用(是否指向同一个对象):只有指向同一个对象时才相等. 用“==”进行比较时,两边的数据类型必须兼容(可自动转换的基本数据类型除外 ...