51nod 范德蒙矩阵
思路: 根据矩阵乘法的定义,G中的第i行第j列的元素 ai,j ,对答案的贡献为 ai,j∗ T中第j行的所有元素之和。
因此我们可以将T中根据每行的和进行排序。第i行的和可以通过公式 (ai^n−1)/(ai−1)直接得出。
注意考虑 ai=1,ai=0 以及 ai>MOD 的特殊情况即可。还有就是对于除法取模需要用到逆元(费马小定理)
一开始没注意除法取模 狂WA 12遍也是心累。。。。。
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5 6 using namespace std; 7 typedef long long LL; 8 const LL mod = 1e9 + 7; 9 const int maxn = 1e5 + 10; 10 LL b[maxn], ans, a[maxn]; 11 LL n, m; 12 LL Pow(LL a, LL b)//快速幂 13 { 14 LL ans = 1; 15 while (b) { 16 if (b & 1) { 17 ans *= a;ans %= mod; 18 } 19 a *= a;a %= mod; 20 b >>= 1; 21 } 22 return ans; 23 } 24 int main() 25 { 26 ios::sync_with_stdio(false); 27 while (cin >> n >> m) { 28 for (int i = 1; i <= m; i++) { 29 cin >> a[i]; 30 } 31 sort(a + 1, a + m + 1); 32 for (int i = 1; i <= m; i++) { 33 a[i] = (a[i] % mod + mod) % mod; 34 if (a[i] == 0)b[i] = 1; 35 else if (a[i] == 1)b[i] = n; 36 else { //费马小定理对除法取模 37 b[i] = (Pow(a[i], n) - 1 + mod) % mod; 38 b[i] = b[i] * Pow(a[i] - 1, mod - 2) % mod; 39 } 40 } 41 //以下是求解 42 ans = 0; 43 LL num = (n*(n + 1) / 2) % mod; 44 for (int i = 1; i <= m; i++) { 45 ans = (ans + (num*b[i]) % mod) % mod; 46 num = (num + n * n) % mod; 47 } 48 cout << ans << endl; 49 } 50 return 0; 51 }
转载于:https://www.cnblogs.com/wangrunhu/p/9451812.html
51nod 范德蒙矩阵相关推荐
- 1960 范德蒙矩阵(数学贪心)
1960 范德蒙矩阵 LYK最近在研究范德蒙矩阵与矩阵乘法,一个范德蒙矩阵的形式如下: 它想通过构造一个含有1~nm的n*m的矩阵G,使得G*V得到的n*n的矩阵T中所有位置上的元素之和最大.其中n, ...
- matlab-线性代数 创建 N阶数量矩阵 N阶单位矩阵 对角矩阵 范德蒙矩阵 等差数列...
2019独角兽企业重金招聘Python工程师标准>>> matlab : R2018a 64bit OS : Windows 10 x64 typesettin ...
- 拉格朗日插值与范德蒙矩阵
******************************** 鉴于在博客中写公式略显难看,有碍观瞻,博客中的内容我都事先用latex写了一个pdf的文档,可以在下链接下载 http://downl ...
- 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结
Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...
- 半正定Toeplitz矩阵的范德蒙德分解
半正定Toeplitz矩阵的范德蒙德分解 Toeplitz矩阵的定义:Matrices whose entries are constant along each diagonal are calle ...
- MATLAB编程实现范德蒙德型矩阵
编程实现范德蒙德型矩阵: 代码如下: x=[-1 0 1 2 3]'; %定义5维列向量x for i=1:1:5 %行控制变量i从1~5,步长为1 for j=1:1:5 %列控制变量j从1~5,步 ...
- 范德蒙德和Teoplitz方程组的解法
范德蒙德和Teoplitz方程组的解法 简单介绍 工程中的很多实际问题的处理,比如说图像处理的某些情况,最后往往归结为比较容易处理的Vandermonde方程组和Teoplitz方程组的求解问题,因此 ...
- C语言二维数组范德蒙,浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理...
浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...
- 浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理...
浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...
- 【Codeforces 785D】范德蒙恒等式
1.题目链接.题目大意:一个由括号构成的序列,让你找到这个序列中有多少个好的子序列.一个好的子序列的定义是这样的: 2.分析:这个题是一个组合数学问题.对于每一个'(',我们统计它的左边有多少个和它相 ...
最新文章
- 程序员为什么会有职业瓶颈?
- Grafana Worldmap外网用户request地图监控
- 三面求对称二叉树_字节跳动后端实习面经,一面+二面+三面(已收到offer)
- [bash] 打包某目录(可以是绝对路径)下的指定扩展名的文件
- 看完这些干货帖,大数据产品从入门到精通
- 【小技巧】桌面图标出现蓝色问号的怎么办?
- 全球最大域名注册商 GoDaddy 的托管账户凭证遭泄露
- qtcreator下拉列表怎么制作_如何用WPS制作月度记账表
- 【20181031T2】几串字符【数位DP思想+组合数】
- 过拟合和欠拟合_TensorFlow教程-过拟合和欠拟合
- mac打开airplay(隔空播放)
- 战双帕弥什qq登录服务器未响应是什么意思,战双帕弥什qq登录
- apm软件仿真+QGC地面站 环境搭建
- 苹果手机上的python编程软件-Python编程软件有哪些?
- 在linux系统中使用WoeUSB工具制作U盘启动盘
- ios android 手柄,升级至iOS 13系统iPhone现已支持Xbox手柄
- python--format
- 条形码生成器:TBarCode SDK 11.X
- 远程桌面工具栏无法唤出-退出办法 远程桌面关机
- 单片微型计算机原理及应用ppt,(精品完整版)单片微型计算机原理及应用.ppt...