正解:数论+$dp$

解题报告:

传送门

首先关于前面k对情侣的很简单,就是$C(n,k)\cdot C(n,k)\cdot A(k,k)\cdot 2^k$.随便解释下,就是选座位*选情侣*情侣选座位*情侣之间换左右位置

然后难点大概在于后面的$(n-k)$对不能在一起的怎么求方案数

就考虑,$dp$,设$f[i]$表示$i$对情侣的情况

然后随便选一排,显然选人有$2\cdot i\cdot (2\cdot i-2)$

那对他们的情侣,有两种可能

一种是他们的情侣就坐一块儿了,于是就是$(i-2)\cdot 2\cdot f_{i-1}$(坐哪排,换左右位置,剩下$i-2$排的方案

另一种就是不坐一块呗,那我们就要强制让他们不做一块

思考不坐一起这个阶段情侣的定义,不就是不能坐一起的人嘛

于是这一对儿就成了一对新情侣($hhh$听着有点鬼畜$x$

所以就是$f_{i-1}$

综上!这题就做完了!

总结一下式子:$C(n,k)\cdot C(n,k)\cdot A(k,k)\cdot 2^k\cdot f_{n-k},f_i=2\cdot i\cdot (i-1)\cdot (2\cdot (i-1)\cdot f_{i-2}+f_{i-1})$

$over!$

(对了!神仙$tr$还港了种,神仙才能用的方法,,,就暴力,求导微分搞下就搞完了,,,$QwQ$

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rg register
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i) const ll N=+,mod=;
ll T,mx,fac[N]={},poww[N]={},inv[N],f[N]={,},n[N],k[N]; inline ll read()
{
rg char ch=getchar();rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline ll power(ll x,ll y){ll as=;while(y){if(y&)as=(ll)x*as%mod;y>>=;x=(ll)x*x%mod;}return as;}
inline ll dec(ll a,ll b){a-=b;return a<?a+mod:a;}
inline ll inc(ll a,ll b){a+=b;return a>=mod?a-mod:a;}
inline ll C(ll n,ll m){return (ll)fac[n]*inv[m]%mod*inv[n-m]%mod;}
inline ll A(ll n,ll m){return (ll)fac[n]*inv[n-m]%mod;} int main()
{
T=read();rp(i,,T)mx=max(mx,n[i]=read()),k[i]=read();++mx;
rp(i,,mx)poww[i]=inc(poww[i-],poww[i-])%mod,fac[i]=(ll)fac[i-]*i%mod;
inv[mx]=power(fac[mx],mod-);my(i,mx,)inv[i-]=(ll)inv[i]*i%mod;
rp(i,,mx)f[i]=(ll)inc(*(i-)*f[i-]%mod,f[i-])*%mod*i%mod*(i-)%mod;
rp(i,,T)printf("%lld\n",(ll)A(n[i],k[i])*C(n[i],k[i])%mod*poww[k[i]]%mod*f[n[i]-k[i]]%mod);
return ;
}

放下代码QAQ

然后这题有个双倍经验,和这题差不多的$QwQ$方法什么的都一样代码也不用变多少

我就放下代码就溜了$QAQ$

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rg register
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i) const ll N=+,mod=;
ll T,mx,fac[N]={},poww[N]={},inv[N],f[N]={,},n[N]; inline ll read()
{
rg char ch=getchar();rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
inline ll power(ll x,ll y){ll as=;while(y){if(y&)as=(ll)x*as%mod;y>>=;x=(ll)x*x%mod;}return as;}
inline ll dec(ll a,ll b){a-=b;return a<?a+mod:a;}
inline ll inc(ll a,ll b){a+=b;return a>=mod?a-mod:a;}
inline ll C(ll n,ll m){return (ll)fac[n]*inv[m]%mod*inv[n-m]%mod;}
inline ll A(ll n,ll m){return (ll)fac[n]*inv[n-m]%mod;} int main()
{
T=read();rp(i,,T)mx=max(mx,n[i]=read());++mx;
rp(i,,mx)poww[i]=inc(poww[i-],poww[i-])%mod,fac[i]=(ll)fac[i-]*i%mod;
inv[mx]=power(fac[mx],mod-);my(i,mx,)inv[i-]=(ll)inv[i]*i%mod;
rp(i,,mx)f[i]=(ll)inc(*(i-)*f[i-]%mod,f[i-])*%mod*i%mod*(i-)%mod;
rp(i,,T)
rp(j,,n[i])printf("%lld\n",(ll)A(n[i],j)*C(n[i],j)%mod*poww[j]%mod*f[n[i]-j]%mod);
return ;
}

洛谷P4931 情侣!给我!烧了! 数论的更多相关文章

  1. 洛谷P4931 情侣?给我烧了!(加强版)(组合数学)

    题面 传送门 题解 首先我们算出刚好有\(k\)对情侣的方案数 从\(n\)对情侣中选出\(k\)对,方案数为\({n\choose k}\) 从\(n\)排座位中选出\(k\)排,方案数为\({n\ ...

  2. 洛谷 P4931 - [MtOI2018]情侣?给我烧了!(加强版)(组合数学)

    洛谷题面传送门 A 了这道题+发这篇题解,就当过了这个七夕节吧 奇怪的过节方式又增加了 首先看到此题第一眼我们可以想到二项式反演,不过这个 \(T\) 组数据加上 \(5\times 10^6\) 的 ...

  3. 洛谷 P6060 - [加油武汉]传染病研究(数论)

    洛谷题面传送门 一道不算太难的题,题解稍微写写吧( 首先根据约数个数和公式,对于一个 \(n=p_1^{\alpha_1}·p_2^{\alpha_2}·\cdots·p_m^{\alpha_m}\) ...

  4. 【洛谷P4931】 情侣?给我烧了!(加强版)组合计数

    挺有意思的一道题... code: #include <bits/stdc++.h> using namespace std; #define N 5000006 #define mod ...

  5. 洛谷P4495 [HAOI2018]奇怪的背包(数论)

    题面 传送门 题解 好神仙的思路啊--orzyyb 因为不限次数,所以一个体积为\(V_i\)的物品可以表示出所有重量为\(\gcd(V_i,P)\)的倍数的物品,而所有物品的总和就是这些所有的\(\ ...

  6. 洛谷 P3307 - [SDOI2013]项链(Burnside 引理+数论)

    题面传送门 看到题目我们显然可以将题目拆分成两部分:首先求出有多少个符合要求的珠子 \(c\),这样我们就可以将每种珠子看成一种颜色,题目也就等价于有多少种用 \(c\) 种颜色染长度为 \(n\) ...

  7. 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

    洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...

  8. 洛谷P2194 HXY烧情侣

    题目描述 众所周知,\(HXY\)已经加入了\(FFF\)团.现在她要开始喜\((sang)\)闻\((xin)\)乐\((bing)\)见\((kuang)\)地烧情侣了.这里有\(n\)座电影院, ...

  9. HXY烧情侣(洛谷 2194)

    题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...

随机推荐

  1. redis资料

    http://snowolf.iteye.com/blog/1630697  征服redis配置 http://redis.readthedocs.org/en/latest/  redis命令参考 ...

  2. 使用 urllib 发送请求

    urllib.request.urlopen(url, data=None, timeout=n) 用于发送HTTP请求并得到响应内容 In []: import urllib.request In ...

  3. Dictionary的应用

    在C#中,Dictionary提供快速的基于兼职的元素查找.他的结构是这样的:Dictionary<[key], [value]> ,当你有很多元素的时候可以使用它.它包含在System. ...

  4. 天猫浏览型应用的CDN静态化架构演变(转)

    转自:http://wbj0110.iteye.com/blog/2036613 在天猫双11活动中,商品详情.店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击.随着历年来双11流量的大幅 ...

  5. 常见C语言编译错误解析【转】

    C语言编译错误信息及说明1. 在函数 ‘transform’ 中:7: 错误:expected ‘;’ before ‘{’ token    解释:‘{’之前的某个语句缺少分号‘;’: 2. 在函数 ...

  6. 32位win7+vs2008编译mysql 5.6.22源码并安装

    以下这部分安装说明是来自http://www.2cto.com/database/201407/316681.html的win7+vs2010源码编译mysql,文章最后会说明用vs2008编译遇见的 ...

  7. 如何将一个项目打成war包?

    如何将一个项目打成war包?进入该项目所在目录jar  -cvf  myProjec.war  myProject

  8. JavaScript表达式--掌握最全的表达式,一切尽在掌握中,让表达不再是难事

    一.JavaScript表达式: 算术表达式: 字符串表达式: 关系(比较)表达式: 逻辑表达式 二.JavaScript运算符: ●什么是表达式--表达式是产生一个结果值的式子,常量,变量,运算符. ...

  9. 向Windows内核驱动传递用户层定义的事件Event,并响应内核层的通知

    完整的程序在下载:http://download.csdn.net/detail/dijkstar/7913249 用户层创建的事件Event是一个Handle句柄,和内核中的创建的内核模式下的KEV ...

  10. 一个linux命令之grep---1

    grep   表示“匹配” 参数常用的四个 -i    匹配的文件内容忽略大小写 -R   递归的匹配文件(即在一层一层的目录中的文件中去匹配) -n   表示匹配出的行显示在文件中的行号 -H   ...