洛谷P4931 情侣!给我!烧了! 数论
正解:数论+$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 情侣!给我!烧了! 数论的更多相关文章
- 洛谷P4931 情侣?给我烧了!(加强版)(组合数学)
题面 传送门 题解 首先我们算出刚好有\(k\)对情侣的方案数 从\(n\)对情侣中选出\(k\)对,方案数为\({n\choose k}\) 从\(n\)排座位中选出\(k\)排,方案数为\({n\ ...
- 洛谷 P4931 - [MtOI2018]情侣?给我烧了!(加强版)(组合数学)
洛谷题面传送门 A 了这道题+发这篇题解,就当过了这个七夕节吧 奇怪的过节方式又增加了 首先看到此题第一眼我们可以想到二项式反演,不过这个 \(T\) 组数据加上 \(5\times 10^6\) 的 ...
- 洛谷 P6060 - [加油武汉]传染病研究(数论)
洛谷题面传送门 一道不算太难的题,题解稍微写写吧( 首先根据约数个数和公式,对于一个 \(n=p_1^{\alpha_1}·p_2^{\alpha_2}·\cdots·p_m^{\alpha_m}\) ...
- 【洛谷P4931】 情侣?给我烧了!(加强版)组合计数
挺有意思的一道题... code: #include <bits/stdc++.h> using namespace std; #define N 5000006 #define mod ...
- 洛谷P4495 [HAOI2018]奇怪的背包(数论)
题面 传送门 题解 好神仙的思路啊--orzyyb 因为不限次数,所以一个体积为\(V_i\)的物品可以表示出所有重量为\(\gcd(V_i,P)\)的倍数的物品,而所有物品的总和就是这些所有的\(\ ...
- 洛谷 P3307 - [SDOI2013]项链(Burnside 引理+数论)
题面传送门 看到题目我们显然可以将题目拆分成两部分:首先求出有多少个符合要求的珠子 \(c\),这样我们就可以将每种珠子看成一种颜色,题目也就等价于有多少种用 \(c\) 种颜色染长度为 \(n\) ...
- 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...
- 洛谷P2194 HXY烧情侣
题目描述 众所周知,\(HXY\)已经加入了\(FFF\)团.现在她要开始喜\((sang)\)闻\((xin)\)乐\((bing)\)见\((kuang)\)地烧情侣了.这里有\(n\)座电影院, ...
- HXY烧情侣(洛谷 2194)
题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...
随机推荐
- Nginx 防盗链
“盗链”的定义是:此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容. 常常是一些小网站来盗取一些有实力的大网站的地址(比如一些 ...
- U3D调用7z解压文件
using UnityEngine; using System; using System.IO; using System.Diagnostics; public class Test : Mono ...
- 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...
- STL——空间配置器(SGI-STL)
一. 空间配置器标准接口 参见<STL源码剖析>第二章-2.1.<memory>文件. 二.具备次配置力的SGI空间配置器 1. SGI STL的配置器与众不同,也与标准规范不 ...
- ajax劫持?
<html<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=ut ...
- css 去除页面双击事件
-ms-touch-action: manipulation !important;
- 【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 ...
- 零基础读懂视频播放器控制原理——ffplay播放器源代码分析
版权声明:本文由张坤原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/535574001486630869 来源:腾云阁 ht ...
- junit4 详解
转:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html JUnit4概述 JUnit4是JUnit框架有史以来的最大改进, ...
- [APP] Android 开发笔记 001-环境搭建与命令行创建项目
1. 安装JDK,SDK JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html Android SDK http ...