正解:数论+$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. Nginx 防盗链

    “盗链”的定义是:此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容. 常常是一些小网站来盗取一些有实力的大网站的地址(比如一些 ...

  2. U3D调用7z解压文件

    using UnityEngine; using System; using System.IO; using System.Diagnostics; public class Test : Mono ...

  3. 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...

  4. STL——空间配置器(SGI-STL)

    一. 空间配置器标准接口 参见<STL源码剖析>第二章-2.1.<memory>文件. 二.具备次配置力的SGI空间配置器 1. SGI STL的配置器与众不同,也与标准规范不 ...

  5. ajax劫持?

    <html<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=ut ...

  6. css 去除页面双击事件

    -ms-touch-action: manipulation !important;

  7. 【truffle】Error: `truffle init` no longer accepts a project template name as an argument.

    下载范例工程时候.使用命令报错 truffle init webpack 错误如下: Error: `truffle init` no longer accepts a project templat ...

  8. 零基础读懂视频播放器控制原理——ffplay播放器源代码分析

    版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...

  9. junit4 详解

    转:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html JUnit4概述 JUnit4是JUnit框架有史以来的最大改进, ...

  10. [APP] Android 开发笔记 001-环境搭建与命令行创建项目

    1. 安装JDK,SDK JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html Android SDK http ...