线性代数一之矩阵转向量随机化求解——神奇的矩阵(BZOJ)+向量内积

向量随机化

  • 神奇的矩阵
    • description
    • solution
    • code
  • [NOI2013]向量内积
    • description
    • solution
    • code

矩阵既可以看成是一张数位表,也可以看成是若干个行向量或者若干个列向量的向量表

在这里插入图片描述

神奇的矩阵

description

solution

暴力做A∗BA*BAB会达到n3n^3n3的复杂度,难以接受

考虑,如果对于矩阵A,B,CA,B,CA,B,C满足A∗B=CA*B=CAB=C,显然有A∗B∗R=C∗RA*B*R=C*RABR=CR

于是有随机一个1×n1\times n1×n的向量RRR,然后check等式是否成立,A∗R∗BA*R*BARB就会降成n2n^2n2的复杂度

随机多次都无法满足这个式子,A∗B=CA*B=CAB=C的概率就微乎其微(除非你是非酋)

code

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n;struct matrix {int n, m;int c[1000][1000];matrix() {memset( c, 0, sizeof( c ) );}matrix operator * ( matrix &t ) {matrix ans;ans.n = n, ans.m = t.m;for( int i = 0;i <= n;i ++ )for( int j = 0;j <= t.m;j ++ )for( int k = 0;k <= m;k ++ )ans.c[i][j] += c[i][k] * t.c[k][j];return ans;}
}A, B, C, R, ans1, ans2;signed main() {srand( time( 0 ) );next :while( ~ scanf( "%lld", &n ) ) {n --;A.n = A.m = B.n = B.m = C.n = C.m = n;for( int i = 0;i <= n;i ++ )for( int j = 0;j <= n;j ++ )scanf( "%lld", &A.c[i][j] );for( int i = 0;i <= n;i ++ )for( int j = 0;j <= n;j ++ )scanf( "%lld", &B.c[i][j] );for( int i = 0;i <= n;i ++ )for( int j = 0;j <= n;j ++ )scanf( "%lld", &C.c[i][j] );int t = 30;again :while( t -- ) {R.n = 0, R.m = n;for( int i = 0;i <= n;i ++ )R.c[0][i] = rand();ans1 = R * A * B;ans2 = R * C;for( int i = 0;i <= n;i ++ )if( ans1.c[0][i] != ans2.c[0][i] )goto again;printf( "Yes\n" );goto next;}printf( "No\n" );}return 0;
} 

[NOI2013]向量内积

description

solution

  • k=2

    • 求出矩阵两两内积(mod2)\pmod 2(mod2) ,即Y=A∗ATY=A*A^TY=AAT
    • 接下来就是判断Y=E,EY=E,EY=E,E为全111矩阵(Yi,jY_{i,j}Yi,j代表着AAAiii行向量与ATA^TATjjj列向量也就是原来的AjA_jAj行向量的内积)因为如果全111代表着每两个向量的内积都为1(mod2)1\pmod 21(mod2)
      • 判断方法就是上一题的随机化
      • 只要不等,就会有一个000向量,找到其位置pospospos,最后暴力求每个向量与其的内积是否整除kkk即可
  • k=3,此时Ai,j=0/1/2A_{i,j}=0/1/2Ai,j=0/1/2,不能在使用上述EEE来判断了

    • 转换一下即可,Zi,j=Yi,j2(mod3)Z_{i,j}=Y_{i,j}^2\pmod 3Zi,j=Yi,j2(mod3),有12≡23≡1(mod3)1^2\equiv 2^3\equiv 1\pmod 312231(mod3),只有02≡0(mod3)0^2\equiv 0\pmod3020(mod3)

    • 再次使用EEE来进行判断

    • 问题在于,ZZZYYY每个单项的平方,不是整体的平方,不能使用矩阵快速得到

      • α\alphaα是随机的一个1×n1\times n1×n向量

      • (Z∗α)i=∑j=1nZi,j∗αj=∑j=1nYi,j2∗αj=∑j=1nαj(∑k=1nAi,kAk,jT)2(Z*\alpha)_i=\sum_{j=1}^nZ_{i,j}*\alpha_j=\sum_{j=1}^nY_{i,j}^2*\alpha_j=\sum_{j=1}^n\alpha_j\bigg(\sum_{k=1}^nA_{i,k}A^T_{k,j}\bigg)^2(Zα)i=j=1nZi,jαj=j=1nYi,j2αj=j=1nαj(k=1nAi,kAk,jT)2

        =∑j=1nαj∑k1=1nAi,k1Ak1,jT∗∑j=1nαj∑k2=1nAi,k2Ak2,jT=\sum_{j=1}^n\alpha_j\sum_{k_1=1}^nA_{i,k_1}A^T_{k_1,j}*\sum_{j=1}^n\alpha_j\sum_{k_2=1}^nA_{i,k_2}A^T_{k_2,j}=j=1nαjk1=1nAi,k1Ak1,jTj=1nαjk2=1nAi,k2Ak2,jT

      • 发现可以变为∑k1,k2Ai,k1Ai,k2∗∑j=1nαjAk1,jAk2,jT\sum_{k_1,k_2}A_{i,k_1}A_{i,k_2}*\sum_{j=1}^n\alpha_jA_{k_1,j}A^T_{k_2,j}k1,k2Ai,k1Ai,k2j=1nαjAk1,jAk2,jT

        预处理出和iii无关部分,设gk1,k2=∑j=1nαjAk1,jAk2,jTg_{k_1,k_2}=\sum_{j=1}^n\alpha_jA_{k_1,j}A^T_{k_2,j}gk1,k2=j=1nαjAk1,jAk2,jT

code

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 100005
#define maxd 105
int n, d, k, sum, pos, flag;
int x[maxn][maxd], g[maxn][maxd];
int ret[maxd], r[maxn];void calc2() {for( int i = 1;i <= d;i ++ ) ret[i] = 0;for( int i = 1;i <= d;i ++ )for( int j = 1;j <= n;j ++ )ret[i] = ( ret[i] + r[j] * x[j][i] ) % k;for( int i = 1;i <= n;i ++ ) {int ans = 0;for( int j = 1;j <= d;j ++ )ans = ( ans + ret[j] * x[i][j] ) % k;if( ans != sum ) {pos = i, flag = 1;break;}}
}void calc3() {for( int k1 = 1;k1 <= d;k1 ++ )for( int k2 = 1;k2 <= d;k2 ++ ) {g[k1][k2] = 0;for( int j = 1;j <= n;j ++ )g[k1][k2] = ( g[k1][k2] + r[j] * x[j][k1] % k * x[j][k2] ) % k;}for( int i = 1;i <= n;i ++ ) {int ans = 0;for( int k1 = 1;k1 <= d;k1 ++ )for( int k2 = 1;k2 <= d;k2 ++ )ans = ( ans + x[i][k1] * x[i][k2] % k * g[k1][k2] ) % k;if( ans != sum ) {pos = i, flag = 1;break;}}
}signed main() {srand( time( 0 ) );scanf( "%lld %lld %lld", &n, &d, &k );for( int i = 1;i <= n;i ++ )for( int j = 1;j <= d;j ++ )scanf( "%lld", &x[i][j] );	for( int T = 1;T <= 6;T ++ ) {sum = 0;for( int i = 1;i <= n;i ++ )r[i] = rand() % k, sum = ( sum + r[i] ) % k;if( k == 2 ) calc2();else calc3();if( flag ) break;}if( ! flag ) return ! printf( "-1 -1\n" );else {for( int i = 1;i <= n;i ++ )if( i ^ pos ) {int ans = 0;for( int j = 1;j <= d;j ++ )ans = ( ans + x[i][j] * x[pos][j] ) % k;if( ! ans ) return ! printf( "%lld %lld\n", min( i, pos ), max( i, pos ) );}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

潘淳:国士无双《微软技术俱乐部(苏州)成立大会暨微软技术交流会介绍》附专题视频...

题记&#xff1a;凡我赶不上的&#xff0c;我就在未来等他&#xff0c;随时等待捕捉那个趋势的的到来。2019年立一个FLAG&#xff0c;加入一个成长性组织&#xff0c;一个能让我学习使我成长的平台。2019年你和我都将亲历这个组织的到来&#xff0c;一个属于苏州程序员自己的大…

ASP.NET Core中借助CSRedis实现安全高效的分布式锁

引言最近回头看了看开发的.NET Core 2.1项目的复盘总结&#xff0c;其中在多处用到Redis实现的分布式锁&#xff0c;虽然在OnResultExecuting方法中做了防止死锁的处理&#xff0c;但在某些场景下还是会发生死锁的问题&#xff0c;下面我只展示部分代码&#xff1a;问题&#x…

L Machining Disc Rotors

L Machining Disc Rotors 题意&#xff1a; 圆心为(0,0)半径为R的圆&#xff0c;现在被被n个互不相交的圆切割(圆心和半径会给出)&#xff0c;保证这n个彼此之间不会交叉&#xff0c;保证n个圆中不会有某个包含整个大圆的情况。问切割后大圆剩余部分的直径&#xff08;即两点…

线性代数二之矩阵加速DP——数学作业,Arc of Dream

矩阵加速数学作业descriptionsolutioncodeArc of Dreamdescriptionsolutioncode数学作业 description solution dpdpdp状态转移方程&#xff0c;dpidpi−1∗10lenii(modM)dp_{i}dp_{i-1}*10^{len_i}i\pmod Mdpi​dpi−1​∗10leni​i(modM) nnn巨大&#xff0c;分段矩阵加速 …

Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】

接着上一篇Shadow Properties之美&#xff08;一&#xff09;&#xff0c;我们来继续举一个有点啰嗦的栗子。先看简单需求&#xff1a;某HR系统&#xff0c;需要记录员工资料。需要记录的资料有&#xff1a;员工号&#xff08;规则&#xff1a;分公司所在城市拼音首字母&#x…

线性代数三之状压DP的矩阵加速——Quad Tiling,Bus公交线路

状压与矩阵加速的藕断丝连Quad Tilingdescriptionsolutioncode[Hnoi2010]Bus 公交线路descriptionsolutioncodeQuad Tiling description solution 设dpi,S:dp_{i,S}:dpi,S​: iii列的状态为SSS的方案数&#xff0c;最后答案为dpn,(1<<4)−1dp_{n,(1<<4)-1}dpn,(…

如何在ASP.NET Core程序启动时运行异步任务(2)

原文&#xff1a;Running async tasks on app startup in ASP.NET Core (Part 2)作者&#xff1a;Andrew Lock译者&#xff1a;Lamond Lu在我的上一篇博客中&#xff0c;我介绍了如何在ASP.NET Core应用程序启动时运行一些一次性异步任务。本篇博客将继续讨论上一篇的内容&…

线性代数四之动态DP(广义矩阵加速)——Can you answer these queries III,保卫王国

动态DP——广义矩阵加速SP1716 GSS3 - Can you answer these queries IIIdescriptionsolutioncode[NOIP2018 提高组] 保卫王国descriptionsolutioncode动态DP能矩阵加速要满足外层操作符对内层操作符具有分配率加法对于乘法就具有分配率(ab)*ca*cb*c SP1716 GSS3 - Can you a…

.Net Core跨平台应用研究-HelloArm(串口篇)

引言为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行&#xff0c;针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证研究。硬件环境硬件系统经过对比筛选&#xff0c;选用了友善之臂出品的NanoPC-T3 Plus…

[数论系列一]C Looooops,跳跳棋,The Luckiest number,CF906D Power Tower,Minimal Power of Prime,仪仗队,LCMSUM

文章目录C Looooopsdescriptionsolutioncode跳跳棋descriptionsolutioncodeThe Luckiest numberdescriptionsolutioncodeCF906D Power TowerdescriptionsolutioncodeMinimal Power of Primedescriptionsolutioncode[SDOI2008]仪仗队descriptionsolutioncodeLCMSUMdescriptionso…

.NET Core使用微软AI认知服务识别文字语言

点击上方蓝字关注“汪宇杰博客”识别一段文字的语言有多种途径&#xff0c;在这个以AI为热点的时代&#xff0c;我们也可以给自己的应用强行加上AI&#xff0c;然后就能加上“智慧”的名字“自主研发成功”后去吹牛逼。今天我带大家来看看如何使用微软智慧云Azure提供的AI认知服…

【NET CORE微服务一条龙应用】第二章 配置中心使用

背景系列目录&#xff1a;【NET CORE微服务一条龙应用】开始篇与目录在分布式或者微服务系统里&#xff0c;通过配置文件来管理配置内容&#xff0c;是一件比较令人痛苦的事情&#xff0c;再谨慎也有湿鞋的时候&#xff0c;这就是在项目架构发展的过程中&#xff0c;配置中心存…

D - ABC Conjecture Gym - 102798D

D - ABC Conjecture Gym - 102798D 题意&#xff1a; 规定rad(n)n的所有质因子的乘积 给你一个c&#xff0c;问能否构造a和b使得abc且rad(abc)<c 题解&#xff1a; 先说结论&#xff0c;如果c可以拆分出两个一样的质因子&#xff0c;则能构造a和b 即 np1a1 * p2a2 . . .…

“幕后英雄”之Backing Fields【Microsoft Entity Framework Core随笔】

刘德华 有一首歌叫《马桶》&#xff0c;其中有一句歌词是&#xff1a;每一个马桶都是英雄。EFCore也有一个英雄&#xff0c;在幕后默默地任劳任怨。它就叫 "支持字段" (Backing Fields):中文版&#xff1a;https://docs.microsoft.com/zh-cn/ef/core/modeling/backin…

数论练习二之BSGS算法——随机数生成器,Matrix,Lunar New Year and a Recursive Sequence,Fermat‘s Last Theorem

[SDOI2013] 随机数生成器 description solution 肯定是非常想找一个通项公式来表示第nnn个数的 依据形式&#xff0c;考虑化成等比数列 xi1ka(xik)a⋅xibt⇒kba−1x_{i1}ka(x_ik)ax_ibt\Rightarrow k\frac{b}{a-1}xi1​ka(xi​k)a⋅xi​bt⇒ka−1b​ ⇒xiba−1ai−1(x1ba−…

NetCore下模拟和使用Modbus工业通信协议

Tips&#xff1a;1、目前NetCore下与Modbus通信的框架主要选择了 Modbus.Net https://github.com/parallelbgls/Modbus.Net2、modbus是常用的工业通信协议&#xff0c;在软件调试时可以通过modbus pollslave模拟通信通过达到调试目的&#xff0c;下图是我使用软件1&#xff09…

C - Rencontre Gym - 102798C

C - Rencontre Gym - 102798C 参考题解&#xff1a; 参考一 参考二 题意&#xff1a; 有一棵树&#xff0c;树上的点分为三种&#xff0c;&#xff08;一个点可以为多种&#xff09;&#xff0c;现在分别在三种点中随机选一点a&#xff0c;b&#xff0c;c&#xff0c;然后找到…

API标准化成为技术团队面临的最大挑战

调查表明&#xff0c;API 标准化成为了技术团队面临的最大挑战。SmartBear 发布了 2019 年 API 状态报告“The State of API 2019”&#xff0c;此报告旨在为 API 行业建立关于软件团队在 2019 年规划、设计、开发、测试、记录和监控 API 的方法、实践和工具的基准。此次调查有…

线性代数五之高斯消元——[SDOI2010]外星千足虫,[HNOI2013]游走,[HNOI2011]XOR和路径,[hdu 4035]Maze

多类型高斯消元杂题[SDOI2010]外星千足虫descriptionsolutioncode[HNOI2013]游走descriptionsolutioncode[HNOI2011]XOR和路径descriptionsolutioncodeMaze(树上高斯消元)problemsolutioncode[SDOI2010]外星千足虫 description solution 高斯消元的模板题 虽然感觉问了个最…

Ocelot 资源汇总

前言最近一两年.NET Core的关注度持续上升, 微服务及云原生应用开发上采用.NET Core也越来越多&#xff0c;Ocelot 作为.NET Core平台下一款开源的API 网关开发库越来越得到社区的认可&#xff0c;应用到生产中的案例也有好几百了。春节抽空整理了现有网上公开的Ocelot相关的资…