果然如Miracle学长所说...调了一天...qwq..还是过不了线下的Hack upd after 40min:刚刚过了 就是多了一个判无解的操作... 当系数都为0,且常数项不为0时,即为无解. 当找到自由元时,不能跳过这一行...否则会被Hack,见洛谷讨论 #include<cstdio> #include<iostream> #include<cmath> #define R register int using namespace std; ; inlin…
模板特殊情况没exit(0) $\longrightarrow$60 了一下午 //#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(regi…
目录 题目链接 题解 题目链接 luogu P2962 [USACO09NOV]灯Lights 题解 可以折半搜索 map合并 复杂度 2^(n / 2)*logn 高斯消元后得到每个点的翻转状态 爆搜自由元得到最优翻转状态 // luogu-judger-enable-o2 #include<map> #include<queue> #include<cstdio> #include<cstring> #include<algorithm> u…
题目链接 因为这个专门跑去学了矩阵树定理和高斯消元qwq 不过不是很懂.所以这里只放题解 玫葵之蝶的题解 某未知dalao的矩阵树定理 代码 #include<cstdio> #include<cstdlib> #include<cctype> #include<algorithm> #include<cstring> #include<cmath> #define eps 1e-8 #define maxn 100 using na…
题目链接:https://www.luogu.org/problemnew/show/P2455 无解:最后一列对应元素不为0,前面全是0. 无穷解:一行全是0. 嗯...在消元过程中不要直接拿矩阵元素自己消,会把自己消成0. #include <algorithm> #include <cstdio> #include <cmath> #include <iostream> using namespace std; ; ; double A[maxn][m…
大概就是对每一行先找到最大的减小误差,然后代入消元 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<queue> #include<vector> #include<map> #include<set>…
P2455 [SDOI2006]线性方程组 真\(\cdot\)高斯消元模板题 由于各种hack数据被造出来~码量突增~,其实也就多了二三十行 将每行系数消到最多有一个非0数 特殊情况: 在过程同时 没有这元了,则表示有无穷解 发现一行系数都为0,但函数值不为0,则表示无解 最后要注意的是,无穷解的前提是有解 #include <iostream> #include <algorithm> #include<cmath> #include<cstring>…
题目链接 题意: H * W (W,H <= 10) 的矩阵A的某个元素A[i][j],从它出发到其他点的曼哈顿距离小于等于D的所有值的和S[i][j]除上可达点的数目,构成了矩阵B.给定矩阵B,求矩阵A. 分析: 将所有矩阵A的元素看成自变量,一共有H*W个变量,每个矩阵B的元素是由这些变量组合而成的,对于固定的B[i][j],曼哈顿距离在D以内的A[x][y]的系数为1,其它为0,这样就变成了求H*W个变量和H*W个方程的线性方程组,高斯消元求解.这题数据量比较小,所以直接采用浮点数的高斯消…
初始有一个空串s,从前n个大写字母中不断随机取出一个字母添加到s的结尾,出现模式串t时停止,求停止时s的长度期望. 这道题解法不唯一,比较无脑的方法是对模式串t建一个单串AC自动机,设u为自动机上的一个结点,dp[u]为从该结点出发走到终结状态时的期望步数,则dp[u]=∑(1+dp[v])/n,v为u的后继状态.特别地,终结状态的dp值为0. 这样一来,就可以列出线性方程组进行高斯消元了.由于答案非常大,用double会损失精度,所以改成longlong. 由于有除法的存在,为了防止出现除不开…
题面 传送门 思路 这题妙啊 先把式子摆出来 $f_n(d)=\sum_{i=1}^n[gcd(i,n)==1]i^d$ 这个$gcd$看着碍眼,我们把它反演掉 $f_n(d)=\sum_{i=1}^n\sum_{j|i,j|n}\mu(j)i^d=\sum_{j|n}\mu(j)\sum_{i=1}^{\frac{n}{j}}(ij)^d=\sum_{j|n}\mu(j)j^d\sum_{i=1}^{\frac{n}{j}}i^d$ 那么最后面这个东西就是个自然数幂求和了 在这篇关于斯特林数的…
传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次数是多少呢?可以先算出点的概率 $p(u,v)=\frac{p[u]}{d[u]}+\frac{p[v]}{d[v]}$ $p[u]$表示经过这个点的期望次数,$d[u]$表示这个点的度数 那么点的期望次数怎么求? $p[u]=\sum_{(u,v)\in E}\frac{p[v]}{d[v]}$…
题面 Problem Description Now give you a circuit who has n nodes (marked from 1 to n) , please tell abcdxyzk the equivalent resistance of the circuit between node 1 and node n. You may assume that the circuit is connected. The equivalent resistance of t…
题目描述 已知n元线性一次方程组. 其中:n<=50, 系数是[b][color=red]整数<=100(有负数),bi的值都是整数且<300(有负数)(特别感谢U14968 mmqqdd提出题目描述的说明)(redbag:是mqd自己要我写的= =)[/color][/b]. 编程任务: 根据输入的数据,编程输出方程组的解的情况. 输入输出格式 输入格式: 第一行:未知数的个数.以下n行n+1列:分别表示每一格方程的系数及方程右边的值. 输出格式: 如果方程组无实数解输出-1: 如果有…
https://www.luogu.com.cn/problem/P3389 主元消元法[模板] 高斯消元是解决多元线性方程组的方法,再学习它之前,先引入一个东西--行列式 行列式的性质: 这里我们只说其中的两条: ①行列式中的一行,加上另一行的\(k\)倍,行列式的值不变 ②交换行列式的两行,行列式的值会变为原来的相反数 每一个有唯一解的线性方程,都拥有一个与其对应的行列式 //如果想详细学习行列式,可以自行上网百度~ 目的:为了方便求解,利用①性质,我们可以把它消成上三角行列式(矩阵的对角线…
PS. 看了大神的题解,发现确实可以用m个未知数的高斯消元做.因为确定了第一行的情况,之后所有行的情况都可以根据第一行推. 这样复杂度直接变成O(m*m*m) 知道了是高斯消元后,其实只要稍加处理,就可以解决带模的情况. 1 是在进行矩阵行变化的时候,取模. 2 最后的除法用逆元.(因为a[i][i]必定非0 且小于模数) 然后对于无穷多解的情况,只需要将那些列全为0的未知数定义一个固定值.(这里设的是0)其余操作不变. #include <iostream> #include <cst…
题目链接 高斯消元详解 /* $Description$ 在n维空间中给定n+1个点,求一个点使得这个点到所有点的距离都为R(R不给出).点的任一坐标|xi|<=1e17. $Solution$ 根据题意可以列出n+1个二元n次方程,相邻的方程相减可以把二次项和R全部约掉,得到n个一元n次方程. 但需要注意这题数据量较大,最大的可能解范围为1e17,如果利用大数(高精...) 乘法的复杂度会很高 可以采用同余的方法,所有运算需要模一个足够大的素数(>1e17),可以用Miller_Rabin生…
题目链接 \(Description\) 求\(A_0,A_1,A_2,\cdots,A_{n-1}\),满足 \[A_0*1^0+A_1*1^1+\ldots+A_{n-1}*1^{n-1}\equiv B[1](mod\ p)\] \[A_0*2^0+A_1*2^1+\ldots+A_{n-1}*2^{n-1}\equiv B[2](mod\ p)\] \[\ldots\ldots\ldots\] \[A_0*n^0+A_1*n^1+\ldots+A_{n-1}*n^{n-1}\equiv…
#include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> using namespace std; #define N 20 double A[N][N],L[N][N],U[N][N],b[N],Y[N],X[N]; /// --------------------------------------------------------------------…
题目链接 唉我个ZZ…… 首先考虑到异或是可以每一位分开算的 好的以后再碰见位运算题我一定先往按位开车上想 然后设f[i]为从i点出发到终点是1的概率 高斯消元解方程组即可. #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> #include<cstdlib> #include<cmath> #include<bitset> #d…
题目链接 水比题,把圆方程展开减一下把平方都减掉半径的平方也减掉,高斯消元即可. 然后我只输出两位小数,爆了两次零.我好菜啊. #include<cstdio> #include<cstdlib> #include<algorithm> #include<cctype> #include<cstring> #include<cmath> #define maxn 20 #define eps 1e-9 using namespace…
题目链接 高斯消元解%2意义下的方程,Bitset优化一下. 在消的过程中就能顺便把有解的第一问求出来,记录一下访问过的最大行. #include<cstdio> #include<cstring> #include<algorithm> #include<cctype> #include<cstdlib> #include<bitset> #define maxn 1020 #define maxm 2020 using names…
题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 ;i<=n;++i) ;j<=n+;++j) scanf("%lf",&s[i][j]); 读入肯定没什么问题(不过我在这卡了一分多钟) 然后我们要进行消元操作 所谓消元操作其实就是对于输入的矩阵 比如说 9 3 2 2 1 4 7 3 1 3 4 5 进行一番乱搞,使得第当前枚举的(比如说枚举第i行第i列)s[i][j]系数变成1. 实际上就是整行同除qwq 比如我们除完第一行第一列的之后,矩…
祭一下第一道独立做出来的高斯消元(虽然在各大佬看来都是水题...) 首先这道题给了你n+1个一次方程,n个未知数 其中有一个方程是错误的 求解在合法的前提下最大的未知数是多少... 显然高斯消元... 关注到\(n≤100\)所以\(n^4\)的算法是极限 高斯消元复杂度是\(n^3\)所以我们可以暴力枚举那个方程是错误的 之后判断合法性即可... 总之也不是很难啊,关键是不要忘记illegal...刚开始程序末尾的illegal忘了然后就Subtask2 WA了一个点... 直接看代码直观一点…
链接 给出的条件是异或类型的方程,可以直接用bitset优化高斯消元. 至于求K,在高斯消元时记录用到的最大的方程的编号即可. 代码: // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; #define N 1007 #define M 2007 char s[N]; bitset<N> b[M]; int n,m; int main() { int i,j; scanf("%d%d…
传送门 解题思路 用高斯消元对矩阵求逆,设\(A*B=C\),\(C\)为单位矩阵,则\(B\)为\(A\)的逆矩阵.做法是把\(B\)先设成单位矩阵,然后对\(A\)做高斯消元的过程,对\(B\)进行同样的操作,最后把\(A\)消成单位矩阵时,\(B\)就是其的逆矩阵. 代码 #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorit…
题面 高斯消元模板题. 这里直接讲述一下高斯消元的算法流程: 枚举每一列 \(c\): 找到第 \(c\) 列绝对值最大的一行: 将这一行换到最上面: 将该行的第一个数变成 \(1\): 将下面所有行的第 \(c\) 列变成 \(0\). 处理完后需要从最后一行往回迭代,求出每一个未知数的值. #include <bits/stdc++.h> using namespace std; const double eps = 1e-6; //浮点数误差 int n, m; double a[103…
LINK:随机漫游 非常妙的一道题. 容易想到倒推期望. 设状态 f[i][j]表示到达第i个点 此时已经到达的集合为j能走到全集的期望边数. 只要求出来这个就能O(1)回答询问. \(f[i][j]=1+\sum_{v\in son_x,v\notin j}\frac{1}{d_i}f[i][j|v]+\sum_{v\in son_x,v\in j}\frac{1}{d_i}f[i][j]\) 有了这个东西 显然可以\((2^n\cdot n)^3\)暴力高斯消元了. 考虑优化 容易发现如果按…
题目描述: 详细分析: 我们对于编号的分配,很明显可以发现如下的分配就是期望最小的:对经过的期望次数越大的边赋予更小的编号. 那么问题就转化为了怎么求一条边的经过的期望次数,我们发现边数非常大所以肯定不好弄,所以我们就转而看很少的点.因为我们会发现如果我们能知道经过每个点的期望次数,那么这条边的期望次数很轻松就能表达出来. 比如如下的式子:(设 \(ans[i]\) 为经过第 \(i\) 个点的期望次数, \(du[i]\) 为第 \(i\) 个点的度数, \(res[i]\) 为经过第 \(i…
P2455 [SDOI2006]线性方程组 (upd 2018.11.08: 这才是真正的高斯消元模板) 找到所消未知数(设为x)系数最大的式子,把它提上来 把这个式子的 x 系数约成1 把这个式子用来把其他式子的x消掉 重复直到只剩一个未知数,然后往回带 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; typedef d…
Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3597  Solved: 1618[Submit][Status][Discuss] Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数.当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和. 现在,请你对这M条边进行编号…