首页 > 其他分享 >P6475 [NOI Online #2 入门组] 建设城市

P6475 [NOI Online #2 入门组] 建设城市

时间:2024-07-22 18:51:11浏览次数:8  
标签:return NOI int inv Online fac MOD P6475

P6475 [NOI Online #2 入门组] 建设城市

传送门

分类讨论:
设\(f(x, y)\)为\(C^{j-1}_{i +j -1}\)

  1. \(x,y\)在同一旁
    把\(x, y\)之间的看成一个高楼
    公式\(f(n,m)\times f(n+x-y,m)\)
  2. \(x, y\)在异侧
    枚举\(x,y\)高楼的高度\(h\)
    \(\displaystyle \sum^{n}_{i=1}f(x-1,i)*f(n-x,m-i+1)*f(y-n-1,m-i+1)* f(2*n-y,i)\)

接着我们要处理的是\(f(x,y)\)

\[f(x,y)=C^{y-1}_{i +j-1}\\ C^n_m=\frac{m!}{n!(m-n)!} \]

如何\(O(1)\)查询呢?
我们用\(O(n)\)时间预处理出阶乘逆元

fac[0] = inv[0] = 1;
for (int i = 1; i <= M; ++i) fac[i]= (fac[i - 1] * i) % MOD;
inv[M] = Qpow(inv[M], MOD - 2);
for (int i = M - 1; i >= 1; --i) inv[i] = inv[i + 1] * (i + 1) % MOD;

查询:

int C(int n, int m)
{ return fac[m] * inv[n] % MOD * inv[m - n] % MOD; }
int f(int n, int m)
{ return C(y - 1, i + j - 1); }

code :

#include <bits/stdc++.h>

#define int long long
using namespace std;
const int inf = 0x3f3f3f3f;
const int MOD = 998244353, N = 2e5 + 5, M = 2e5;
int fac[N], inv[N], ans;

int Qpow(int x, int y)
{
    int res = 1;
    for (; y; y /= 2, (x *= x) %= MOD)
        if (y & 1) (res *= x) %= MOD;
    return res;
}

int C(int n, int m)
{ return fac[m] * inv[n] % MOD * inv[m - n] % MOD; }
int f(int i, int j)
{ return C(j - 1, i + j - 1); }


signed main()
{
    fac[0] = inv[0] = 1;
    for (int i = 1; i <= M; ++i) fac[i]= (fac[i - 1] * i) % MOD;
    inv[M] = Qpow(fac[M], MOD - 2);
    for (int i = M - 1; i >= 1; --i) inv[i] = inv[i + 1] * (i + 1) % MOD;

    int m, n, x, y;
    scanf("%lld%lld%lld%lld", &m, &n, &x, &y);
    if (x <= n && y > n)
        for (int i = 1; i <= m; i++)
            ans = (ans + f(x - 1, i) * f(n - x, m - i + 1) % MOD * 
                    f(2 * n - y, i) % MOD * f(y - n - 1, m - i + 1) % MOD) % MOD;
    else ans = f(n, m) * f(n + x - y, m) % MOD;
    printf("%lld", ans);
    return 0;
}

标签:return,NOI,int,inv,Online,fac,MOD,P6475
From: https://www.cnblogs.com/wanghaoze121126/p/18316672

相关文章

  • NOI2024 游记
    前言菜,真的太菜啦。\(\texttt{Day0}\)热,热,热,真的汗流浃背了。入住。西西弗,回答我,是不是\(20000\)元的\(\texttt{D}\)类报的人越多你给的宿舍条件越好啊啊喂。甚至发了一堆衣服包包和生活用品,真是太"感动了"。晚餐。迎面而来的蛋炒饭吸引了我的眼球,这东西我每天吃,吃一......
  • [NOIP2012 普及组] 摆花(含代码)
    [NOIP2012普及组]摆花题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共mmm盆。通过调查顾客的喜好,小明列出了顾客最喜欢的......
  • NOI2024 游记
    \(\texttt{NOI[D]2024}\)\(\texttt{Day7/3}\)中考完了。坐火车来到了重庆。\(\texttt{Day7/4-7/12}\)模拟赛。怎么打了一场仨暴力rk1啊??怎么有个A题唐氏\(100\to0\)啊??怎么有场人均题坐牢3h不会,非人均题30min切了啊??总结:mt19937rng;intmy_rank=rng()%people_co......
  • P2704 [NOI2001] 炮兵阵地
    原题链接题解经典的状压dpcode#include<bits/stdc++.h>#definelllonglong#definelowbit(x)((x)&(-x))usingnamespacestd;intsit[105];intdp[505][505][4];boolcheck(intx){intx1=(x>>1)>>1;intx2=(x<<1)<<1;......
  • NOI 2024
    省流:100+264+180=544,rk45极限进队。赛前状态感觉还行,gzy天天在模拟赛里爆标,给他磕头了。day0开幕式。很想喷【】【】【】【】【】【】,算了不喷了。笔试,开场10s大家就开始笑,笔试把答案发下来了。”我们题目的配置出了一点问题,大家稍安勿躁“。致敬传奇出题人。推迟15......
  • P3197 [HNOI2008] 越狱
    原题链接题解正难则反不可能发生越狱的清空:从左到右,第一个人有m种选择,第二个人为了和前面一个人不一样,有m-1种选择。。。code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constllmod=100003;llqpow(lla,lln){llres=1;while(n......
  • [NOIP2005 普及组] 采药
    题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值......
  • NOI2024 集合 题解
    给个链接:集合。很神秘的题目。基本上看到之后就可以想到哈希。首先想到一个比较神秘的暴力。就是对于每个询问,扫一遍所有\(a\)中的数出现的位置,把它弄成一个哈希值(具体怎么弄随意)存到set里,然后看看是不是和\(b\)中的数出现的位置这样操作后的集合完全相等。事实上就是判断......
  • NOI2024 总结
    赛时经历Day1想了1h的t1,然后思路不是很清晰,写了1h。想t2,顺着擂台赛想下去,可以分成\(k\)个一组,每组\(\dfrac{k(k-1)}2\)次查询,然后选出一个最大的组成一个新的序列。过了一会儿,想到dp这个过程,得到82pts。剩下大约1h30min,想t3,一直在往计数+容斥的方向......
  • [HNOI2010] 城市建设
    说一下大致思路,见这篇题解在往下传的过程中,会有动态边变成静态边,如于是可以递归进行reduction和contraction......