洛谷 P3389 【模板】高斯消元法】的更多相关文章

To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:…
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果你不知道这是什么意思也不要问,去百度搜[kmp算法]学习一下就知道了. 输入输出格式 输入格式: 第一行为一个字符串,即为s1(仅包含大写字母) 第二行为一个字符串,即为s2(仅包含大写字母) 输出格式: 若干行,每行包含一个整数,表示s2在s1中出现的位置 接下来1行,包括length(s2)个整…
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类对树的边进行轻重划分的操作,这样做的目的是为了减少某些链上的修改.查询等操作的复杂度. 目前总共有三类:重链剖分,实链剖分和并不常见的长链剖分 重链剖分 实际上我们经常讲的树剖,就是重链剖分的常用称呼. 对于每个点,选择最大的子树,将这条连边划分为重边,而连向其他子树的边划分为轻边. 若干重边连接在…
[题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模板题,直接贴上来. [代码] #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; ; queue < int >…
题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但是这次用last边已经不行了,只能拿76分.我们把跳fail边的过程放到串扫描完之后一次性进行. AC自动机 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int&g…
题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 //n位*n位最多就只有2n位了 //putchar的速度..还是快的 #include <cmath> #include <cstdio> #include <cctype> #include <algorithm> #define gc() getchar(…
题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #include <cmath> #include <cctype> #include <cstdio> #include <algorithm> #define gc() getchar() const int N=1e6+5; const double PI=acos(…
题目链接:洛谷.LOJ. 为什么和那些差那么多啊.. 在这里记一下原根 Definition 阶 若\(a,p\)互质,且\(p>1\),我们称使\(a^n\equiv 1\ (mod\ p)\)成立的最小正整数\(n\)为\(a\)模\(p\)的阶,记作\(\delta_p(a)\). 例:\(\delta_7(2)=3\). 原根 设\(p\)是正整数,\(a\)是整数,若\(\delta_p(a)=\varphi(m)\),则称\(a\)为模\(p\)的一个原根. 从另一方面来说,若\(g…
题目传送门 题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个顶点,M条边 接下来M行,每行三个整数a b w,表示a->b有一条权值为w的边(若w<0则为单向,否则双向) 输出格式: 共T行.对于每组数据,存在负环则输出一行"YE5"(不含引号),否则输出一行"N0"(不含引号). 输入输出样例 输入样例#1: 2…
洛谷 P3806 传送门 这个点分治都不用减掉子树里的了,直接搞就行了. 注意第63行 if(qu[k]>=buf[j]) 不能不写,也不能写成>. 因为这个WA了半天...... 如果memset清空ex数组显然是会T的,所以开一个bef用来记录需要清空哪个地方. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n,m; ],to[],nx[],…
P3389 [模板]高斯消元法 题目背景 Gauss消元 题目描述 给定一个线性方程组,对其求解 输入输出格式 输入格式: 第一行,一个正整数 n 第二至 n+1行,每行 n+1 个整数,为a1​,a2​⋯an​ 和 b,代表一组方程. 输出格式: 共n行,每行一个数,第 i行为 xi​ (保留2位小数) 如果不存在唯一解,在第一行输出"No Solution". 输入输出样例 输入样例#1: 3 1 3 4 5 1 4 7 3 9 3 2 2 输出样例#1: -0.97 5.18 -…
P3389 [模板]高斯消元法 以下内容都可省略,直接转大佬博客%%% 高斯消元总结 只会背板子的蒟蒻,高斯消元是什么,不知道诶,看到大佬们都会了这个水题,蒟蒻只好也来切一切 高斯消元最大用途就是解多元一次方程组——引自某大佬原话 的确是这样的,那么如何去做呢? 类比二元一次方程组: $a_1x+b_1y=c_1$ $a_2x+b_2y=c_2$ emmm,怎么做呢?消去一项!嗯. 也就是把第$i$个方程的第$i$项变成1 $\frac{a_1}{a_1}x+\frac{b_1}{a_1}y=\…
https://www.luogu.org/problemnew/show/P3389 这里主要说说怎么判断不存在唯一解 我们把每一行的第一个非零元称为关键元 枚举到一个变量,如果剩下的行中该变量的系数都是0,那么这个元素就是一个自由元 若方程组有唯一解,第i行的关键元是第i个 否则,一定至少存在某一行i,它的关键元是第j个(j>i) 具体实现: 假设当前枚举到第i行,我们会把第i行之后的 第i列元素最大的那一行 交换到第i行 只需要换完之后加一个判断:if(fabs(a[r][i])<eps…
这是个版子题,当然本蒟蒻也是看了好几天才明白 对于这样的线性方程组,我们可以看成是一个矩阵 对于百度百科给的定义(我感到很迷)赶脚和行列式有的一拼 但我们要注意的是: 行列式是一个确切的值(有关行列式求值,下片博文再说),可以看做是一个数值: 而矩阵不同,矩阵是一个数表,无特殊的值.当然,性质也略有不同(这里就先不细讲了) 高斯消元的核心就是把这个n*n的矩阵消成一个对角矩阵(就是除了a[i][i]为1以外,其余全为零但是不要乱划a[i][n+1]这是我们要输出的东西)然后就ok了 其中一些性质…
以下这个好像叫高斯约旦消元法,没有回代 https://www.luogu.org/blog/37781/solution-p3389 #include<cstdio> #include<algorithm> #include<cmath> #define eps 1e-7 using namespace std; ][]; int n; void swap_line(int x,int y) { ;i<=n+;i++) swap(a[x][i],a[y][i])…
对于高斯消元法求解线性方程组, 我的理解就类似于我们在做数学题时的加减消元法, 只是把它写成一个通用的程序运算过程 对于一个线性方程组,我们从左往右每次将一列对应的行以下的元通过加减消元消去, 每个元的系数最终组成一个上三角矩阵,再倒序回带,求出答案 为了保证程序的可操作性,我们每次要将用来消去下面的元的数化为1, 再将下面的行每个元的系数同时减去主行的系数*扩大的倍数, 这时倍数即为该行要消去的元的系数 建议看一下<数学一本通>的内容,介绍的比较浅显 寻找主元: double的除法操作是有一…
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数ui.vi.wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi) 输出格式: 一行,包含一个正整数,即为该网络的最大流. 输入输出样例 输入样例#1: 复制 4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40 输出样例#1:…
题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 1 1 1 到 n n n. 输入输出格式 输入格式: 一行一个长度为 n n n 的仅包含大小写英文字母或数字的字符串. 输出格式: 一行,共n个整数,表示答案. 输入输出样例 输入样例#1: 复制 ababa 输出样例#1: 复制 5 3 1 4 2 说明 n<=106n <= 1…
人生中的第一道黑题... 其实就是k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <cstdlib> #include <queue> using namespace std; const int MAXN=400005; int init(){ int…
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms 2.24MB #include <cstdio> #include <cctype> #include <cstring> #include <algorithm> //#define gc() getchar() #define MAXIN 300000 #d…
题目链接 换一下形式:\[f_i=\sum_{j=0}^{i-1}f_jg_{i-j}\] 然后就是分治FFT模板了\[f_{i,i\in[mid+1,r]}=\sum_{j=l}^{mid}f_jg_{i-j}+\sum_{j=mid+1}^rf_jg_{i-j}\] 复杂度\(O(n\log^2n)\). 分治思路见:https://www.cnblogs.com/SovietPower/p/9366763.html 多项式求逆做法先坑着. //693ms 4.91MB #include <…
题目传送门 Link Cut Tree 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和.保证x到y是联通的. 1:后接两个整数(x,y),代表连接x到y,若x到y已经联通则无需连接. 2:后接两个整数(x,y),代表删除边(x,y),不保证边(x,y)存在. 3:后接两个整数(x,y),代表将点x上的权值变成y. 输入输出格式 输入格式: 第…
题目传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符串S 输出格式: 一个整数表示答案 输入输出样例 输入样例#1: aaa 输出样例#1: 3 说明 字符串长度len <= 11000000 分析:manacher算法模板,算法分析就不具体讲了,five20大佬讲的挺好的,可以参照一下他的博客. Code: #include<bits/stdc+…
题目:https://www.luogu.org/problemnew/show/P3377 左偏树的模板题: 加深了我对空 merge 的理解: 结构体的编号就是原序列的位置. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int n,m,rt[maxn],fa[maxn]; bool out[ma…
题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,在fail边的基础上再加一个last边,指向真正有效的节点,跳fail边改成跳last边来跳过无效点. AC自动机 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int> PII; ; struct…
存个模板,顺便复习一下kruskal和prim. 题目传送门 kruskal 稀疏图上表现更优. 设点数为n,边数为m. 复杂度:O(mlogm). 先对所有边按照边权排序,初始化并查集的信息. 然后枚举每一条边,如果当前边的两个端点不在一个并查集里,就选上这条边. 如果图不连通会造成选的边数小于n-1. 如果成功生成了最小生成树,就会正好选n-1条边(树的性质). #include<cstdio> #include<cstring> #include<algorithm&g…
题目传送门 显然是一道模板题. 然而索引出现了错误,狂wa不止. 感谢神犇Dr_J指正.%%%orz. 建线段树的时候,第44行. 把sum[p]=bv[pos[l]]%mod;打成了sum[p]=bv[in[l]]%mod; 忘了要用反映射搞一下...... 树链剖分,从每个节点的儿子中,找出子树最大的一个作为重儿子. 然后以此将树链分成轻链和重链. 之后dfs一遍求出树链剖分序. 树链剖分序不仅保证子树内节点的编号在序列上连续,还保证一条重链上的节点的编号连续. 用一个线段树维护一下. 更改…
倍增(爬树)算法,刚刚学习的算法.对每一个点的父节点,就记录他的2k的父亲. 题目为http://www.luogu.org/problem/show?pid=3379 第一步先记录每一个节点的深度用一个深搜,顺便对每个节点的20赋初值为自己的上一个节点. 第二步通过第一步的初始化对每个节点的2k次进行赋值为fa[i][j]=fa[ fa[i][j-1] ][ j-1 ];自己的j-1次幂的父节点的i-1次就是就是自己的j次幂. 第三步对询问做出处理 1,先判断x,y的深度,如果x比y浅就换位置…
题目描述 给定一个只包含小写字母的字符串SSS, 请你求出 SSS 的所有出现次数不为 111 的子串的出现次数乘上该子串长度的最大值. 输入输出格式 输入格式: 一行一个仅包含小写字母的字符串SSS 输出格式: 一个整数,为 所求答案 输入输出样例 输入样例#1: 复制 abab 输出样例#1: 复制 4 说明 对于10%10\%10%的数据,∣S∣<=1000|S|<=1000∣S∣<=1000 对于100%100\%100%的数据,∣S∣<=106|S|<=10^6∣S…
Description 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) Input&Output Input 第一行包含两个正整数N.M,分别表示查询的范围和查询的个数. 接下来M行每行包含一个不小于1且不大于N的整数,即询问该数是否为质数. Output 输出包含M行,每行为Yes或No,即依次为每一个询问的结果. Solution 欧拉筛法的优势在于,在当前i mod 当前素数为0时就退出,保证了每个合数一定只被它的最小素因子筛掉,从而在O(n)时间内…