首页 > 其他分享 >2023.2.15 日寄

2023.2.15 日寄

时间:2023-02-15 22:25:59浏览次数:54  
标签:ch 15 int Inv 2023.2 read Fac Mul

2023.02.15 日寄

一言

爱并不是完美的,爱的背后不可避免地有控制和占有。 爱的恐怖与温柔,不管是好是坏,都一并带它上路吧。——《爱的恐怖主义》

模拟赛

Click Here


Natasha, Sasha and the Prefix Sums

题意

\(~~~~\) 求所有 \(n\) 个 \(1\) ,\(m\) 个 \(-1\) 组成的序列的与 \(0\) 取最大值的前缀最大值的和。
\(~~~~\) \(1\leq n,m\leq 2000\).

题解

\(~~~~\) 很显然可以枚举最后的最大值,恰好不好算,但我们可以算 \(\geq i\) 的方案,然后差分求解。

\(~~~~\) 那么一个经典的模型:\(\binom{n+m}{n}\) 为从 \((0,0)\) 每次走 \((1,1)\) 或 \((1,-1)\) 然后到达 \((n+m,n-m)\) 的方案数。而 \(\geq i\) 就是要求在路径中要接触 \(y=i\) 这条线。

\(~~~~\) 套路性地,若终点在线的两侧那就直接算,否则翻折终点到关于 \(y=i\) 的对称点,显然这样是一一对应地,然后我们再算方案就好了。

代码
查看代码
#include <bits/stdc++.h>
#define PII pair<int,int>
#define mp(a,b) make_pair(a,b)
using namespace std;
template<typename T>void read(T &x)
{
    T f=1;x=0;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}
    x*=f;
}
const int MOD=998244853;
inline int Add(int a,int b){a+=b;return a>=MOD?a-MOD:a;}
inline int Dec(int a,int b){a-=b;return a<0?a+MOD:a;}
inline int Mul(int a,int b){return 1ll*a*b%MOD;}
inline int qpow(int a,int b)
{
	int ret=1;
	while(b)
	{
		if(b&1) ret=Mul(ret,a);
		b>>=1;a=Mul(a,a);
	}
	return ret;
}
int res[2005],Fac[4005],Inv[4005];
inline int C(int n,int r){return r>n?0:Mul(Fac[n],Mul(Inv[r],Inv[n-r]));}
int main() {
	Fac[0]=1;
	int n,m;read(n);read(m);
	for(int i=1;i<=n+m;i++) Fac[i]=Mul(Fac[i-1],i);
	Inv[n+m]=qpow(Fac[n+m],MOD-2);
	for(int i=n+m-1;i>=0;i--) Inv[i]=Mul(Inv[i+1],i+1);
	for(int i=0;i<=n;i++)//前缀和最大值 >= i 
	{
		if(n-m>=i) res[i]=C(n+m,n);
		else res[i]=C(n+m,n-i); 
//		cerr<<res[i]<<endl;
	}
	int Ans=0;
	for(int i=0;i<=n;i++) Ans=Add(Ans,Mul(i,Dec(res[i],res[i+1])));
	printf("%d",Ans);
	return 0;
}
/*
瑶草一何碧,春入武陵溪。溪上桃花无数,花上有黄鹂。我欲穿花寻路,直入白云深处,浩气展虹霓。只恐花深里,红露湿人衣。
坐玉石,欹玉枕。拂金徽。谪仙何处,无人伴我白螺杯。我为灵芝仙草,不为朱唇丹脸,长啸亦何为。醉舞下山去,明月逐人归。

套路性地枚举值,求交某条线的方案数
对称,变成直接组合数可算的东西 
*/

标签:ch,15,int,Inv,2023.2,read,Fac,Mul
From: https://www.cnblogs.com/Azazel/p/17124935.html

相关文章

  • 2.15 背包学习
    1021.货币系统思路完全背包求方案数,与01背包类似#include<iostream>usingnamespacestd;intn,m;constintN=20,M=3010;longlongf[M];intmain(){......
  • 数据结构刷题2023.02.15小记
    各排序算法时间复杂度如何提高哈希表的查找效率Hash表的查找效率取决于散列函数、处理冲突的方法和装填因子。显然,冲突的产生概率与装填因子(表中记录数与表长之比)的大小......
  • #3742. 「COCI 2015.3」PROSJEK
    算法:二分加前缀和题解:二分查找最大平均值,f函数判断当前平均值mid是否合适,数组元素减去x,求前缀和sum,从sum[k]遍历,mi中存前面的最小值。点击查看代码#include<iostream>......
  • Navicat 15 or 16 永久版本(window和Mac)
    一、下载NavicatPremium官网https://www.navicat.com.cn/下载最新版本下载安装链接包含(window激活包和Mac版本,请选择性下载):https://note.youdao.com/s/MNA5jD5g ......
  • 2023.02.15.差分
    什么是差分首先有一个数组a,在里面包含数据我们定义一个数组b,使每个元素有一下规则b[i]=a[i]-a[i-1](a从一开始保存数据,a[0]=0)也就是说,a数组是b数组的前缀和数组,......
  • 闲话 23.2.15
    闲话vscode被我调ntt搞炸了所以这篇博客直接在cnblogs上写了寄(update:不是vscode,是除了浏览器外的部分今日推歌:一人行者-ilemfeat.心华我知道你可能想说什......
  • ARC154E Reverse and Inversion(*)
    ARC154EReverseandInversionACrecord......
  • 2023.02.15 模拟赛小结
    2023.02.15模拟赛小结目录2023.02.15模拟赛小结更好的阅读体验戳此进入赛时思路T1T2T3T4UPD更好的阅读体验戳此进入啥正经人会在模拟赛用仨小时将普及难度的期望DP转......
  • LG-P6157 有趣的游戏 题解
    LG-P6157有趣的游戏Solution目录LG-P6157有趣的游戏Solution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面给定$n$个点的树,存在点权......
  • CF1534F2 Falling Sand (Hard Version)
    个人思路:每个点向相邻沙子连边,向本列和相邻\(2\)列下方第一个沙子连边。对于一个DAG,所有入度为\(0\)的点会覆盖全部点。我们缩点即可通过F1。但是这样做是过不了......