正解:数论+$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. 执行automake时报错 error while making link: Operation not supported

    执行automake时报错: [root@localhost project]# automake --add-missingconfigure.in: installing `./install-s ...

  2. JSP基本用法(一)运行机制和语法

    一.概述 JSP是一种建立在Servlet规范功能上的动态网页技术,在网页文件中嵌入Java代码和JSP标记用于产生动态内容. 本文简单介绍JSP的运行机制和JSP的语法. 二.JSP的运行机制 JS ...

  3. iOS - 直播总结(理论到实践)

    一.直播原理及流程 1.一个完整直播app原理 直播原理:把主播录制的视频,推送到服务器,在由服务器分发给观众观看. 直播环节:推流端(采集.美颜处理.编码.推流).服务端处理(转码.录制.截图.鉴黄 ...

  4. GCC编译命令常用选项

    GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序 ...

  5. RAID在数据库存储上的应用

    随着单块磁盘在数据安全.性能.容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出现了,RAID把多块独立的磁 ...

  6. 2017春季阿里大文娱(优酷)——C++研发一面

    一.C++基础 1.1 sizeof 问题(空类.含虚函数.内存对齐) 1.2类构造的时候会默认生成哪些函数,C++11多了什么?(move,左\右值) 1.3为什么c++不类似java一样实现一个内 ...

  7. sencha touch 2.2 为list PullRefresh插件添加refreshFn方法

    sencha touch 2.2 list PullRefresh插件没有refreshFn方法 但是我们又需要他,所以需要自行扩展 代码如下 /** * 重写下拉刷新插件,以支持refreshFn事 ...

  8. vue生成路由实例

    一.vue路由https://router.vuejs.org/zh-cn/1.bower下载vue-routervue的里的链接 <router-link to="/home&quo ...

  9. 【CF884D】Boxes And Balls 哈夫曼树

    [CF884D]Boxes And Balls 题意:有n个箱子和若干个球,球的颜色也是1-n,有ai个球颜色为i,一开始所有的球都在1号箱子里,你每次可以进行如下操作: 选择1个箱子,将里面所有的球 ...

  10. dhroid - Perference

    SharedPreferences 是我们开发android使用很多的工具通常我们是这样使用的 SharedPreferences share=getSharedPreferences("n ...