hdu-7113 Matrix 组合数学(计算贡献
Matrix
题意:一个 n×nn\times nn×n 的矩阵,每个位置放置一个数,数的范围 ∈[1,n2]\in [1,n^2]∈[1,n2],从第 111 行到第 nnn 行,每行的最小值形成一个集合 A=A=A= {a1,a2,a3...ana_1,a_2,a_3...a_na1,a2,a3...an},与集合 B=B=B= {1,2,3,....n1,2,3,....n1,2,3,....n} 的交集生成集合 SSS, ∣S∣|S|∣S∣ 表示集合 SSS 所有数之和,求所有的 SSS 集合的 ∣S∣|S|∣S∣ 之和。
思路:
每一个矩阵可以生成一个集合 A=A=A= {a1,a2,a3...ana_1,a_2,a_3...a_na1,a2,a3...an},与集合 BBB 取交集进而生成一个集合 SSS。
我们考虑计算贡献
先看 111,无论它在矩阵的哪个位置始终会生成到集合 AAA,然后看 222,它只有与 111 在同一行的时候才无法产生贡献,看 333,只有1,21,21,2 的位置会对 333 产生贡献有影响,然后我们可以发现,对于 i∈(1,2,3,...n)i \in (1,2,3,...n)i∈(1,2,3,...n),只有 <i<i<i 的 i−1i-1i−1个数的位置会对 iii 产生的贡献有影响。
一开始我考虑用所有的情况 −-− 无法产生贡献的情况去计算答案(n=2n=2n=2的时候过样例了以为写对了,结果一直wa,写的代码比较烂,有时候还T),然后发现情况比较复杂,如果考虑直接计算产生贡献的情况其实是不复杂的。
我们先选定 iii ,然后给在 n2−in^2-in2−i 个 数中选 n−1n-1n−1 个数来和它在一排(Cn2−in−1C_{n^2-i}^{n-1}Cn2−in−1),然后乘以这一行的全排列 AnnA_n^nAnn,然后乘以 Cn1C_n^1Cn1,确定这行在哪,然后再安排剩下的 n2−nn^2-nn2−n 个数。
首先选出 nnn 个数,Cn2−nnC_{n^2-n} ^ nCn2−nn 在一行,然后全排列
然后继续选 nnn 个数, Cn2−2nnC_{n^2-2n} ^nCn2−2nn 在一行,然后全排列
…
然后我们把它写成分数的形式就可以发现可以化简
n!(n2−n)!n!(n2−2n)!×n! \frac{(n^2-n)!}{n!(n^2-2n)!} \timesn!n!(n2−2n)!(n2−n)!× n!(n2−2n)!n!(n2−3n)!×n! \frac{(n^2-2n)!}{n!(n^2-3n)!} \timesn!n!(n2−3n)!(n2−2n)!× n!(n2−3n)!n!(n2−4n)!×n! \frac{(n^2-3n)!}{n!(n^2-4n)!} \timesn!n!(n2−4n)!(n2−3n)!× … n!2n!n!n!×n! \frac{2n!}{n!n!} \timesn!n!n!2n!× n!n!n!0!n! \frac{n!}{n!0!}n!n!0!n!
然后我们可以发现,每一项分子分母都有 n!n!n!,就都约掉了,分母的一部分可以和后一项分子约掉,最后剩下 (n2−n)!{(n^2-n)!}(n2−n)!
举个例子简化这个过程:比如有 1,2,3,4,51,2,3,4,51,2,3,4,5 这 555 个数,求全排列,其中 333 是特殊的,我们先安排3的位置,有 555个位置可以选择,然后考虑其他的数C41C_4^1C41,再选一个 C31C_3^1C31,继续 C21C_2^1C21,C11C_1^1C11,最后得到 A55A_5^5A55。
所以我们得到公式
∑i=1i=nCn2−in−1AnnCn1(n2−n)!\sum_{i=1}^{i=n}C_{n^2-i}^{n-1}A_n^nC_n^1(n^2-n)! i=1∑i=nCn2−in−1AnnCn1(n2−n)!
(其实好像也可以这么理解,安排第一行和它的位置之后,剩下的数进行全排列。
我们预处理一下所有的阶乘,注意计算组合数的时候就没必要用 forforfor 来计算,直接用阶乘+逆元求得,不然也会 TLETLETLE。
复杂度:O(nlog(n))O(nlog(n))O(nlog(n))
code:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 5e3 + 9;
const int maxm = 2e7 + 5e6 + 9;
const int mod = 998244353;
ll A[maxm];
ll n;
ll q_pow(ll a, ll b){ll ans = 1;while(b){if(b & 1) ans=(ans*a)%mod;a=(a*a)%mod;b>>=1;}return ans;
}
ll zh(ll n, ll m)
{ll ans1 = A[n] * q_pow(A[n-m],mod-2) % mod;return ans1 * q_pow(A[m], mod-2ll) % mod;
}
void work()
{scanf("%lld", &n);ll ans = 0;ll tmp = n * n;ll tt = A[tmp-n] * n % mod;// 观察可以发现这项可以提出来最后算for(ll i = 1; i <= n; ++i) {ll x = zh(tmp-i, n-1) * A[n] % mod;ans = (ans + x % mod) % mod;}printf("%lld\n", ans*tt%mod);
}int main()
{A[0] = 1;for(ll i = 1; i <= maxm - 9; ++i) A[i] = A[i-1] * i % mod;int TT;scanf("%d",&TT);while(TT--)work();return 0;
}
hdu-7113 Matrix 组合数学(计算贡献相关推荐
- R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy、Precision、Recall(sensitivity)、F1、Specificity指标
R语言构建混淆矩阵(仿真数据)并基于混淆矩阵(confusion matrix)计算并计算Accuracy.Precision.Recall(sensitivity).F1.Specificity指标 ...
- P2664 树上游戏(点分治/计数题计算贡献/树上差分)
P2664 树上游戏 对于树上n个点,每个点有不同颜色,求解每个点到其他点的路径上不同颜色个数之和. 首先看到这种树上点对问题,我们可以想到点分治,然后考虑每次分治如何求解答案,本质上就是一个数颜色的 ...
- 省赛训练3 G HDU 1759 Matrix Revolution(BFS)
Matrix Revolution Time Limit: 3000 ms /Memory Limit: 32768 kb Description Lele 现在不仅会整数A+B,A*B,还会矩阵A+ ...
- HDU 2206 IP的计算(字符串处理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2206 Problem Description 在网络课程上,我学到了非常多有关IP的知识. IP全称叫 ...
- HDU 2830 Matrix Swapping II
暴力枚举+DP预处理. 可以枚举矩形底边是哪一行,枚举到一行的时候,计算以该行为底边,最大矩形面积是多少. #include<cstdio> #include<cstring> ...
- HDU OJ Matrix Swapping II
Matrix Swapping II Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- HDU 4920 Matrix multiplication(矩阵相乘)
各种TEL,233啊.没想到是处理掉0的情况就能够过啊.一直以为会有极端数据.没想到居然是这种啊..在网上看到了一个AC的奇妙的代码,经典的矩阵乘法,仅仅只是把最内层的枚举,移到外面就过了啊...有点 ...
- 【ZOJ - 3872】Beauty of Array(思维,计算贡献,枚举)
题干: Edward has an array A with N integers. He defines the beauty of an array as the summation of all ...
- hdu 1394 线段树计算逆序数
线段树计算逆序数的原理: 用线段树来统计已插入的数的个数(所以要保证最大的那个数不能太大,否则数组都开不了),然后每插入一个数,就查询比插入的数大的个数,累加即可. 这个题还有一个特点就是,题目给的是 ...
最新文章
- OpenCV,马赛克 常用图像增强算法的实现
- 得到qq正在登录的qq号
- 直方图尖峰python_Python系统学习 - 绘制直方图
- 「分块」数列分块入门1 – 9
- Dev C++ 实现Hello World
- vuejs项目开发环境搭建(ESlint安装)
- Vue+Vue-router+Vuex项目实战
- java 修改txt_Java实现批量修改txt文件名称的方法示例
- 数据库应用程序为什么不能脱离数据库管理系统独立运行
- plugin.super mysql_使用MySQ Clone Plugin部署MySQL Group Replication
- 程序员如何接私活?十年码农悄悄告诉你
- Scala编译后的class文件反编译的结果
- HT6221发送红外HS0038解码程序
- 2022-2028全球石油管材接头行业调研及趋势分析报告
- codeforces 1328 B. K-th Beautiful String
- Android工具类篇 清理APP应用缓存
- codeforces1359C Mixing Water
- 华为防火墙配置SSL+自签CA证书挑战登录
- Spring Boot 定制横幅banner与关闭banner
- clac计算样式不生效?