luoguP4931 情侣?给我烧了!(加强版)
luogu
普通版题解:https://www.cnblogs.com/lcxer/p/10876856.html
在普通版里,我们考虑对于\(n\)对情侣,恰好\(k\)对是和谐的方案数是
\]
然而这样做是\(O(n^2)\)的,瓶颈在于如何快速求出\(g(n-k)\)
之前我们的做法需要用到\(ans\)数组,这样是无法优化的,我们换一个思路来求\(g\)
假如我们已经确定了\(n-1\)对情侣都是乱序的方案数\(g(n-1)\)
那么\(n\)对情侣乱序可以看做选出\(1\)对情侣是和谐的,然后用这\(1\)对情侣中的一个人与其他乱序的人交换,这样得出来的一定是\(n\)对情侣乱序的方案,交换的方案一共是\(2*2(n-1)\),然后考虑将新生成的这对座位插到那\(n-1\)对情侣中的方案数为\(n\)
这一部分的总方案数是
\]
然而这样算的并不全,还有一种情况考虑不到:如果有两对情侣都是和谐的,他们之间互换,这种情况之前的方案是考虑不到的
这样的方案数是多少呢?
除去我们新加的这一组,那么我们就选\(1\)组出来,选出来的方案数是\(n-1\)
这两组互换的方案数是\(8\)
然后再将这两组插回去方案数是\(n(n-1)\)
这一部分的总方案数是
\]
可以发现这已经是所有的方案数了,如果我们多选两组出来,这两组互换一下就是第一部分的方案了,同理其他的情况都可以转化为这两种情况
所以
\]
预处理出来就可以\(O(1)\)询问了
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
void read(int &x) {
char ch; bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=5e6+10,N=5e6,mod=998244353;
int k,T,n,g[maxn],fac[maxn],inv[maxn],d[maxn];
int mul(int x,int y){return 1ll*x*y-1ll*x*y/mod*mod;}
int del(int x,int y){return x-y<0?x-y+mod:x-y;}
int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
int mi(int a,int b){
int ans=1;while(b){if(b&1)ans=mul(ans,a);b>>=1,a=mul(a,a);}
return ans;
}
int C(int n,int m){return mul(fac[n],mul(inv[m],inv[n-m]));}
int A(int n,int m){return mul(fac[n],inv[n-m]);}
int main()
{
read(T);fac[0]=inv[0]=d[0]=1;
for(rg int i=1;i<=N;i++)fac[i]=mul(fac[i-1],i),d[i]=mul(2,d[i-1]);
inv[N]=mi(fac[N],mod-2);
for(rg int i=N-1;i;i--)inv[i]=mul(inv[i+1],i+1);
g[0]=1;
for(rg int i=1;i<=N;i++)g[i]=add(mul(i,mul(4*i-4,g[i-1])),mul(i,mul(8*(i-1),mul(i-1,g[i-2]))));
while(T--)read(n),read(k),printf("%d\n",mul(C(n,k),mul(A(n,k),mul(d[k],g[n-k]))));
}
luoguP4931 情侣?给我烧了!(加强版)的更多相关文章
- 洛谷P4931 情侣!给我!烧了! 数论
正解:数论 解题报告: 传送门 这题,想不到就很痛苦,但是理解了之后还是觉得也没有很难,,,毕竟实现不难QAQ 首先关于前面k对情侣的很简单,就是C(n,k)*C(n,k)*A(k,k)*2k 随便解 ...
- 洛谷 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对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...
- HXY烧情侣
题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要 ...
- P2194 HXY烧情侣【Tarjan】
前言 当时和\(GYZ\)大佬一起做这个题,他表示这个题对他很不友好(手动滑稽) 题目描述 众所周知,\(HXY\) 已经加入了 \(FFF\) 团.现在她要开始喜(sang)闻(xin)乐(bing ...
- 【Luogu4931】情侣?给我烧了! 加强版(组合计数)
[Luogu4931]情侣?给我烧了! 加强版(组合计数) 题面 洛谷 题解 戳这里 忽然发现我自己推的方法是做这题的,也许后面写的那个才是做原题的QwQ. #include<iostream& ...
- luogu4931. 情侣?给我烧了!(加强版)(错位排列)
题目链接 https://www.luogu.org/problemnew/show/P4931 题解 以下部分是我最开始的想法. 对于每一个 \(k\),满足恰好有 \(k\) 对情侣和睦的方案数为 ...
- 洛谷P4931 情侣?给我烧了!(加强版)(组合数学)
题面 传送门 题解 首先我们算出刚好有\(k\)对情侣的方案数 从\(n\)对情侣中选出\(k\)对,方案数为\({n\choose k}\) 从\(n\)排座位中选出\(k\)排,方案数为\({n\ ...
随机推荐
- SPOJ375Query on a tree I(树剖+线段树)(询问边)
ιYou are given a tree (an acyclic undirected connected graph) with N nodes, and edges numbered 1, 2, ...
- BZOJ2428:[HAOI2006]均分数据
我对模拟退火的理解:https://www.cnblogs.com/AKMer/p/9580982.html 题目传送门:https://www.lydsy.com/JudgeOnline/probl ...
- Java中读取输入方式的性能比较
程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这 ...
- spring 学习 requestMapping
1: @RequestMapping:处理请求地址映射的请求,有6个属性? ` value: URL 地址 method: GET/POST/PUT/DELETE co ...
- JavaScript之使用JavaScript模仿oop编程
第一, 首先,使用关键字function定义一个类 function Shape1(ax,ay) {//此时将function看成声明类的标志 ; ; var init=function () {// ...
- Sql server 时间格式转化
--.SQL时间格式转化 --日期转换参数 ) --2009-03-15 15:10:02 ),'-',''),' ',''),':','') ) , ) --2009/03/15 ) , ) ) , ...
- linux 下 安装mysql
安装之前,因为redhat 是yum自带的,但是不能使用,因为要交钱,还要订阅,所以需要卸载,重新安装163提供的yum 在另外一篇文章介绍 yum list mysql* 列出所有关于mysal的安 ...
- js验证文本框数字
输入框 <input name="title" type="text" oninput="onlyNum(this,'')" titl ...
- [原创]SQL 表值函数:获取从今天计算起往前自定义天数
PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好. 在我开发过程中,遇到一个统计需求,结果是要求返回从当天起往回推算出自定义输入的天数 为此我写了一个表值函数 ...
- Ubuntu12.04安装R ,Rstudio, RHive
环境: Ubuntu12.04 R-3.1.0 0.Ubuntu安装R官网的介绍 http://mirrors.ustc.edu.cn/CRAN/ Precise Pangolin (12.04; L ...