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. 跑得更快!华为云GaussDB以出色的性能守护“ERP的心脏”

    摘要:GaussDB已经全面支撑起MetaERP,在包括库存服务在内的9大核心模块中稳定运行,端到端业务效率得到10倍提升. 本文分享自华为云社区<跑得更快!华为云GaussDB以出色的性能守护 ...

  2. 深入浅出synchronized的原理与源码

    深入浅出synchronized的原理与源码 1.java对象头关于锁的标识 1.对象头 // 32 bits: // -------- // hash:25 ------------>| ag ...

  3. 如何使用libavfilter库给pcm音频采样数据添加音频滤镜?

    一.初始化音频滤镜 初始化音频滤镜的方法基本上和初始化视频滤镜的方法相同,不懂的可以看上篇博客,这里直接给出代码: //audio_filter_core.cpp #define INPUT_SAMP ...

  4. Lamada List 去重及其它操作示例

    import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util. ...

  5. C++ 数独游戏

    C++ 数独游戏 直接上代码: 1 // 数独 sudoku 2 3 #include <iostream> 4 5 using namespace std; 6 7 int P[9][9 ...

  6. Federated Learning004

    联邦学习--笔记004 2023.03.13周一 快中期答辩了(3.20),最近甲流高发期 毕设期间,今天学习了联邦学习的一篇论文---Differentially Private Federated ...

  7. [爬虫]2.3.1 使用Python操作文件系统

    Python提供了许多内置库来处理文件系统,如os.shutil和pathlib等,这些库可以帮助你创建.删除.读取.写入文件和目录. 读取文件 在Python中,你可以使用内置的open函数来打开一 ...

  8. 【工具推荐】github打不开or加载慢?不用配置hosts,教你一键加速!

    不说废话 下载watt toolkit(原名steam++) 官方地址: Watt Toolkit - 瓦特工具箱(Steam++官网) (steampp.net) 安装完后选中,点击一键加速即可. ...

  9. ASP.NET WebForm中在TextBox输入框回车时会触发其他事件,如何处理?

    一.TextBox在输入框回车时会触发其他事件,如何解决? 前台代码: <ul> <li><span>名称:</span><asp:TextBox ...

  10. quarkus依赖注入之十三:其他重要知识点大串讲(终篇)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<quarkus依赖注入> ...