博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SD 一轮集训 day4 弦形袋鼠
阅读量:4708 次
发布时间:2019-06-10

本文共 1141 字,大约阅读时间需要 3 分钟。

 

 

     可以发现把每一个 a[i] * b[i] 加到矩阵里去,就相当于 把一个 1*m 的向量伸缩后变成 n个再加到矩阵里去,所以答案就是远=原矩阵中线性线性无关组的个数。

 (而且好像一个矩阵横着消元和竖着消元 ,得到的线性无关组个数是一样的啊)

 

#include
#include
#include
#include
#define ll long longusing namespace std;const int ha=1e9+7,maxn=205;inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;}inline void ADD(int &x,int y){ x+=y; if(x>=ha) x-=ha;}inline int ksm(int x,int y){ int an=1; for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha; return an;}int a[maxn][maxn],n,m;inline int solve(){ int i=1,j=1,pos; while(i<=n&&j<=m){ pos=0; for(int k=i;k<=n;k++) if(a[k][j]){ pos=k; break;} if(!pos){ j++; continue;} if(pos!=i) for(int k=j;k<=m;k++) swap(a[pos][k],a[i][k]); int inv=ksm(a[i][j],ha-2),tmp; for(int k=i+1;k<=n;k++) if(a[k][j]){ tmp=inv*(ll)a[k][j]%ha; for(int l=j;l<=m;l++) ADD(a[k][l],ha-a[i][l]*(ll)tmp%ha); } i++,j++; } return i-1;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]),ADD(a[i][j],ha); printf("%d\n",solve()); return 0;}

  

转载于:https://www.cnblogs.com/JYYHH/p/9176033.html

你可能感兴趣的文章
COMP30023 Computer Systems 2019
查看>>
CSS选择器分类
查看>>
Kali学习笔记39:SQL手工注入(1)
查看>>
C# MD5加密
查看>>
Codeforces Round #329 (Div. 2)D LCA+并查集路径压缩
查看>>
移动应用开发测试工具Bugtags集成和使用教程
查看>>
Java GC、新生代、老年代
查看>>
Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
查看>>
多线程
查看>>
折线切割平面
查看>>
获取当前路径下的所有文件路径 :listFiles
查看>>
图像形态学及更通用的形态学的原理及细节汇总
查看>>
linux开启coredump的3种方法
查看>>
数据驱动之 python + requests + Excel
查看>>
小鸡啄米问题求解
查看>>
Castle.net
查看>>
HDU1532 网络流最大流【EK算法】(模板题)
查看>>
PHP使用curl替代file_get_contents
查看>>
Webstorm通用设置
查看>>
jquery倾斜的动画导航菜单
查看>>