Counting Grids

题目大意

将 \(1\sim n^2\) 填入 \(n\times n\) 的网格 \(A\) 中,对于每个格子满足以下条件之一:

  • 该列中存在大于它的数。

  • 该行中存在小于它的数。

求方案数。

思路分析

首先有一个比较显然的结论:对于一个不合法的方案,有且仅有一个数不满足任何一个条件。

考虑反证法,假设有两个数都不满足任何一个条件,设这两个数分别位于 \((x_1,y_1),(x_2,y_2)\),则有:\(A_{x_1,y_1}>A_{x_1,y_2}>A_{x_2,y_2}\),\(A_{x_2,y_2}>A_{x_2,y_1}>A_{x_1,y_1}\),存在矛盾,而多个数的情况可以归纳为两个数的情况,故结论成立。

正难则反,考虑计算不合法的方案数:

设不满足任何条件的数为 \(i\),考虑到 \(i\) 是所在列中最大的数,且是所在行中最小的数,故所在行的填法为 \(A_{n^2-i}^{n-1}\),所在列的填法为 \(A_{i-1}^{n-1}\),其他的地方随便填,一定满足条件,填法为 \((n-1)^2!\),再考虑 \(i\) 的位置,故得出不合法的方案数的计算式为:

\[n^2\times (n-1)^2!\times\sum_{i=n}^{n^2-n+1}A_{n^2-i}^{n-1}A_{i-1}^{n-1}
\]

那么合法的方案数只需要用 \(n^2!\) 减一下就可以了。

如果预处理阶乘和阶乘逆元,那么计算的时间复杂度为 \(O(n^2)\)。

代码

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio> using namespace std;
const int N=250100,V=250000,mod=998244353;
#define int long long int fac[N],inv[N];
int n,ans; int q_pow(int a,int b){
int res=1;
while(b){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
} int A(int n,int m){
if(n<m) return 0;
return fac[n]*inv[n-m]%mod;
} signed main(){
scanf("%lld",&n);
int n2=n*n;
fac[0]=1;
for(int i=1;i<=n2;i++) fac[i]=fac[i-1]*i%mod;
inv[n2]=q_pow(fac[n2],mod-2);
for(int i=n2;i>=1;i--) inv[i-1]=inv[i]*i%mod;
for(int i=n;i<=n2-n+1;i++)
ans=(ans+A(n2-i,n-1)*A(i-1,n-1)%mod)%mod;
ans=(ans*fac[(n-1)*(n-1)]%mod)*n2%mod;
ans=(fac[n*n]-ans+mod)%mod;
cout<<ans<<'\n';
return 0;
}

[ARC143B] Counting Grids 题解的更多相关文章

  1. 【SP26073】DIVCNT1 - Counting Divisors 题解

    题目描述 定义 \(d(n)\) 为 \(n\) 的正因数的个数,比如 \(d(2) = 2, d(6) = 4\). 令 $ S_1(n) = \sum_{i=1}^n d(i) $ 给定 \(n\ ...

  2. P4778 Counting Swaps 题解

    第一道 A 掉的严格意义上的组合计数题,特来纪念一发. 第一次真正接触到这种类型的题,给人感觉好像思维得很发散才行-- 对于一个排列 \(p_1,p_2,\dots,p_n\),对于每个 \(i\) ...

  3. POJ 2386 Lake Counting 搜索题解

    简单的深度搜索就能够了,看见有人说什么使用并查集,那简直是大算法小用了. 由于能够深搜而不用回溯.故此效率就是O(N*M)了. 技巧就是添加一个标志P,每次搜索到池塘,即有W字母,那么就觉得搜索到一个 ...

  4. CF908A New Year and Counting Cards 题解

    Content 有 \(n\) 张卡牌,每张卡牌上只会有大小写字母和 \(0\sim 9\) 的阿拉伯数字.有这样一个描述:"如果卡牌正面写有元音字母(\(\texttt{A,E,I,O,U ...

  5. CF335E Counting Skyscrapers 题解

    提供一种最劣解第一且巨大难写的做法( Bob 显然真正的楼量可以达到 \(314!\),是没办法直接做的,再加上唯一方案的样例,可以猜测有简单的结论. 考虑当楼高度为 \(k(k<h)\) 时, ...

  6. The 2013 South America/Brazil Regional Contest 题解

    A: UVALive 6525 cid=61196#problem/A" style="color:blue; text-decoration:none">Atta ...

  7. Lyndon Word 与 Lydon 分解

    \(\newcommand\m\mathbf\) \(\newcommand\t\texttt\) \(\text{By DaiRuiChen007}\) 约定: 对于两个字符串 \(S,T\),用 ...

  8. 【题解】Counting D-sets(容斥+欧拉定理)

    [题解]Counting D-sets(容斥+欧拉定理) 没时间写先咕咕咕. vjCodeChef - CNTDSETS 就是容斥,只是难了一二三四五\(\dots \inf\)点 题目大意: 给定你 ...

  9. 【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]

    [题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描 ...

  10. 洛谷P3104 Counting Friends G 题解

    题目 [USACO14MAR]Counting Friends G 题解 这道题我们可以将 \((n+1)\) 个边依次去掉,然后分别判断去掉后是否能满足.注意到一点, \(n\) 个奶牛的朋友之和必 ...

随机推荐

  1. 「学习笔记」Lambda 表达式

    Lambda 表达式因数学中的 \(\lambda\) 演算得名, 直接对应于其中的 lambda 抽象. Lambda 表达式能够捕获作用域中的变量的无名函数对象, 我们可以将其理解为一个匿名的内联 ...

  2. 代码发布平台jenkins中Check-out Strategy选项功能意义

    第一个选项:Use'svn update' as much as possible  这个选项能实现快速发布:Use 'svn update' whenever possible, making th ...

  3. LEA: Improving Sentence Similarity Robustness to Typos Using Lexical Attention Bias 论文阅读

    LEA: Improving Sentence Similarity Robustness to Typos Using Lexical Attention Bias 论文阅读 KDD 2023 原文 ...

  4. 面由 AI 生|ZegoAvatar 捏脸技术解析

    一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"."沉 ...

  5. Day05_Java_作业

    A:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果. 1.看程序写结果 class Demo { public static void main(String[] args) { i ...

  6. 报错 no currentsessioncontext configured!

    no currentsessioncontext configured! 使用hibernate框架报错 配置了session工厂类,使用getCurrentSession();时候引起的,原因是cu ...

  7. opensbi入门

    OpenSBI 入门 声明 本文为本人原创,未经允许,严禁转载. FW_JUMP FW_PAYLOAD FW_DYNAMIC FW_JUMP OpenSBI 带跳转地址的固件(FW_JUMP)是一种仅 ...

  8. 你知道.NET的字符串在内存中是如何存储的吗?

    毫无疑问,字符串是我们使用频率最高的类型.但是如果我问大家一个问题:"一个字符串对象在内存中如何表示的?",我相信绝大部分人回答不上来.我们今天就来讨论这个问题. 一.字符串对象的 ...

  9. SAP ABAP 使用GENIOS求解线性规划问题的简单例子

    主要内容来自Operations Research & ABAP ,结合我遇到的需求,做了一些修改. 需求:有BOX1和BOX2两种箱子,分别能包装不同数量的A物料和B物料,给出若干数量的A, ...

  10. 2021-11-17 WPF初识

    StackPanel容器:默认竖直排列,Orientation="Horizontal"横向排列,超过就不会显示 wrapPanel:超过会自动换行 设置样式: <Windo ...