自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 2021-04-10

添加链接描述#include<bits/stdc++.h>using namespace std;const int N = 6e5+5;int n, m, ver[N], val[N], tot, head[N], net[N], edge[N], pre[N], s, t, num[N], va[N], dis[N], vis[N];void add(int x, int y, int z){ ver[++tot] = y; edge[tot] = z;

2021-04-10 22:24:46 66

原创 拓扑排序

添加链接描述思路建图,输出图的拓扑序code#include<bits/stdc++.h>typedef long long ll;using namespace std;const int N = 205;int n, m;int main(){ cin >> n; while(n--) { string str1, str2; map<string, int> in; map&

2021-04-06 18:39:48 82

原创 数论 B - Products of Min-Max

添加链接描述思路添加链接描述code#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 3e5;const ll mod = 998244353;ll n, m, a[N];int main () { cin >> n; for(ll i = 1; i <= n; i++) cin >> a[i]; so

2021-04-06 18:17:41 109

原创 计算几何 ICPC昆明

计算几何添加链接描述code #include<bits/stdc++.h> using namespace std; typedef pair<double, double> pii; const int N = 1010; const double inf = 1e18; const double eps = 1e-8; int n, m; double xs, ys, xt, yt, x[N], y[N]; int sgn (double x) {

2021-04-06 15:06:38 225

原创 后缀表达式 逆波兰表达式

添加链接描述思路建立一个用于存数的栈,逐一扫描后缀表达式中的元素。①如果遇到一个数字,将改数字入栈。②遇到一个运算符,如果该运算符是一个二元运算符,如&,|等,则弹出栈顶的两个数字运算。如果该运算符是一元运算符,如!,则弹出栈顶的一个数字运算。将运算后的结果再次入栈。扫描完成后,栈中恰好剩下一个数字,就是该后缀表达式的值。code#include <bits/stdc++.h>using namespace std;const int N = 1e5+5;map&lt

2021-03-29 12:25:46 53

原创 概率DP

添加链接描述code#include <bits/stdc++.h>using namespace std;int n, a[105];double p[105], d[105][105];//d[i][j]代表提交了i篇正确j篇的概率int main(){ scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); sort(a + 1, a +

2021-03-29 12:17:54 40

原创 Floyd 最短路

添加链接描述题意有nnn个点,mmm条边,ttt个加油站,每次加满油能走的最远距离为ddd,结点111和nnn也算加油站,求111到nnn的最短距离思路先Floyd 跑一遍,找到每一对点之间的最短距离 。然后建立这样一个图:把所有的加油站和起点111 和终点nnn,放在一起 ,如果一对点的距离超过ddd ,那么视为无法通过,最后在新图上跑一遍最短路。code#include <bits/stdc++.h>using namespace std;typedef long long

2021-03-29 12:14:45 48

原创 区间DP

添加链接描述思路我们可以这样设计状态:dpi,j(i<=j)dp_{i, j}(i <= j)dpi,j​(i<=j) 表示区间[i,j][i, j][i,j] 内合法连接方案中最多的连接数, vi,jv_{i, j}vi,j​则表示从iii到jjj是否存在路径,存在为111 ,不存在则为000 。code#include <bits/stdc++.h> using namespace std; typedef long long ll;const ll N =

2021-03-29 12:05:13 39

原创 连通图 环

添加链接描述题意求连通图的数量,及多少个连通图有环,其中只存在一个结点的图不属于连通图思路用并查集维护连通图的数量,每个连通图含有的结点的数量及含有的边的数量code#include<bits/stdc++.h>using namespace std;const int N = 2e6+7;int t, n, m, fa[N], son[N], edge[N], id;void init(int n){ for(int i = 1; i <= n; i++)

2021-03-19 08:32:25 721

原创 计算几何

添加链接描述code#include<bits/stdc++.h>using namespace std;const int N = 1e4;int id = 0;double dist(double x1, double y1, double x2, double y2){ return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));}int main(){ double ox, oy, sx, sy, ex, ey;

2021-03-19 08:26:25 62

原创 字符串哈希

添加链接描述思路用istringstream取出句子中每个单词code#include<bits/stdc++.h>using namespace std;const int N = 1e5+5;map<string, string> mp;int t;int main(){ cin >> t; while(t--) { string s1, s2; cin >> s1;

2021-03-19 08:21:54 53

原创 CCA的子树

添加链接描述code#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 1e5+5;const ll INF = 1e18;ll n, val[N], sum[N], mx[N], ans = -INF;/*sum[i]保存以结点i为根的树的权值和,mx[i]保存以结点i为根的子树的最大权值和*/vector<ll> vec[N];void dfs(ll x, l

2021-03-17 12:39:06 72

原创 树上最长子链

树形DP求树的直径设D[x]表示从结点x出发,走向以x为根的子树,能够到达的最短距离,设x的子结点y1,y2...yty_1,y_2...y_ty1​,y2​...yt​,则有D[x]=max(Di+edge(x,yi))i=1,2,...tD[x] = max ( D_i + edge(x, y_i) ) i = 1,2,...tD[x]=max(Di​+edge(x,yi​))i=1,2,...t定义F[x]为经过x的最长链的长度,对于x的任意两个结点yi,yjy_i,y_jyi​,yj​,F[x

2021-03-17 12:20:47 102

原创 CCA的搬运

添加链接描述思路给出的操作序列就是最优操作序列code#include<bits/stdc++.h>using namespace std;const int N = 2e3+5;int n, m, ans, cnt, val[N], a[N];int vis[N];int main(){ cin >> n >> m; for(int i = 1; i <= n; i++) cin >> val[i];

2021-03-17 10:59:44 62

原创 膜法记录 二进制状态压缩

添加链接描述思路如用1101表示选择1,3,4行#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 25;const ll inf = 1e9;string s[N];int n, m, a, b, flag, t;int main(){ cin >> t; while(t--) { flag = 0; c

2021-03-13 17:07:09 56

原创 求和 DFS序 树状数组

DFS序dfs序是一种把树状结构改变为线段结构的操作,在之后用树状数组或线段树操作,怎么把树状数组改成线状呢?根据dfs搜索的先后,为其赋上新的值。dfs之后的顺序是ABEFKCGHIA B E F K C G H IABEFKCGHI1234567891 2 3 4 5 6 7 8 9123456789AAA管辖的范围是A−I=1−9A-I=1-9A−I=1−9BBB管辖的范围是B−K=2−5B-K=2-5B−K=2−5以此类推codevoid dfs(ll

2021-03-10 10:47:28 96

原创 旅游 dijkstra 并查集

添加链接描述题意将所有最短路的路径都走一遍,之后就不再走了,问能否还有其他路径从111走到nnn思路先从111到nnn跑一次单源最短路,d1数组保存距离,再从n到1跑一次最短路,d2数组保存距离,然后用d1[x]+z+d2[y]==distance∣∣d1[y]+z+d2[x]==distanced1[x] + z + d2[y] == distance || d1[y] + z + d2[x] == distanced1[x]+z+d2[y]==distance∣∣d1[y]+z+d2[x]==d

2021-03-10 10:37:13 72

原创 牛妹吃豆子 二维差分 二维前缀和

添加链接描述code#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 2e3+5;ll n, m, k, q;ll d[N][N], sum[N][N];int main(){ scanf("%lld%lld%lld%lld", &n, &m, &k, &q); while(k--) { ll x1, y

2021-03-10 10:23:19 72

原创 离散化

离散化先将数组升序排序,然后去重。for(int i = 1; i <= n; i++){ scanf("%d%d%d", &a[i], &b[i], &c[i]); d[++cnt] = a[i]; d[++cnt] = b[i]; } sort(d+1, d+1+cnt); cnt = unique(d + 1, d + cnt + 1) - (d+1); init(cnt); for(int i = 1; i <= n;

2021-03-07 14:45:04 68

原创 组合数学&&乘法逆元

排列数Anm=n!(n−m)!A_n^m = \frac{n!}{(n-m)!}Anm​=(n−m)!n!​组合数Cnm=n!m!(n−m)!C_n^m = \frac{n!}{m!(n-m)!}Cnm​=m!(n−m)!n!​性质Cnm=Cnn−mC_n^m = C_n^{n-m}Cnm​=Cnn−m​Cnm=Cn−1m+Cn−1m−1C_n^m = C_{n-1}^m + C_{n-1}^{m-1}Cnm​=Cn−1m​+Cn−1m−1​Cn0+Cn1+Cn2+......Cnn=2nC_

2021-03-06 22:20:12 163

原创 乘法逆元&&概率论

乘法逆元若整数bbb, mmm互质, 并且b∣ab|ab∣a,则存在一个整数xxx,使得a/b≡a∗x(mod m)a/b \equiv a * x(mod \ m)a/b≡a∗x(mod m)。称x为b的模m的乘法逆元,记为b−1(mod m)b^{-1}(mod \ m)b−1(mod m)。因为a/b≡a∗b−1≡ a/b∗b∗b−1(mod m)a/b \equiv a * b^{-1}\equiv \ a/b * b*b^{-1}(m

2021-03-05 21:12:49 168

原创 异或和之和

位运算添加链接描述思路按位统计,计算每位的贡献。先算出每位为111的个数cnt[i]cnt[i]cnt[i],然后n−cnt[i]n-cnt[i]n−cnt[i]就是每位为000的个数。当每次取333个数,对应的位做异或运算时,只有当运算结果为111,那一位才会对结果有贡献。由于只有1xor1xor11 xor 1 xor 11xor1xor1和1xor0xor01xor0xor01xor0xor0运算结果才为111,所以对每一位,1的个数里面取333个111,或者111的个数里面取111个111,两

2021-03-05 17:23:21 145

原创 牛顿迭代法

牛顿迭代法牛顿法的作用是使用迭代的方法来求解函数方程的根。简单地说,牛顿法就是不断求取切线的过程。对于形如f(x)=0f(x)=0f(x)=0的方程,首先任意估算一个解x0x_0x0​,再把该估计值代入原方程中。由于一般不会正好选择到正确的解,所以有f(x)=af(x)=af(x)=a。这时计算函数在x0x_0x0​处的斜率,和这条斜率与x轴的交点x1x_1x1​。f(x)=0f(x)=0f(x)=0中精确解的意义是,当取得解的时候,函数值为零(即f(x)f(x)f(x)的精确解是函数的零点)。因此,

2021-03-04 23:50:03 2310 1

原创 2n皇后

2n皇后问题解题思路1.先放置白皇后,再考虑第二个皇后2.那么白皇后要怎么放呢,皇后不能同行同列,不能在同一条左斜线和右斜线。我们的递归函数是从第一行递归到最后一行,所以我们不需要标记行,那么我们拿三个数组分别标记列和两个斜线的占用情况。列的标记很容易理解,那么怎么标记左斜线和右斜线的占用情况呢?我们以左斜线为例子,请看图我们很容易可以发现黄线路径的每个格子行和列之和是相等的,比如(1,4)(2,3)的和都是5。同理观察一下红线,可以发现红线路径的格子行和列之和都为9。可以知道,左斜线的规律就是同

2021-03-02 22:14:49 85

原创 约束和 && 分块

题目背景Smart最近沉迷于对约数的研究中。题目描述对于一个数X,函数f(X)表示X所有约数的和。例如:f(6)=1+2+3+6=12。对于一个X,Smart可以很快的算出f(X)。现在的问题是,给定两个正整数X,Y(X<Y),Smart希望尽快地算出f(X)+f(X+1)+……+f(Y)的值,你能帮助Smart算出这个值吗?输入格式:输入文件仅一行,两个正整数X和Y(X<Y),表示需要计算f(X)+f(X+1)+……+f(Y)。输出格式:输出只有一行,为f(X)+f(X+1)+…

2021-02-26 22:07:04 95

原创 最大子矩阵

添加链接描述思路1.如果单纯枚举首行,末行,首列,末列来做这道题,就是四重循环,数据最大时,每重循环大概500次,500^4时间复杂度可以达到十的十次方,肯定会超时。所以要考虑能否降循环,或者找到贪心,dp规律。2.我们思考一下,可以发现。我们可以开一个数组sum,用来记录某个格子头上全部的格子+它本身的和。举个例子,样例的数据是-1 -4 33 4 -1-5 -2 8那么sum数组就是-1 -4 32 0 2-3 -2 10/sum数组的建立看代码13~24行/3.建立起sum数组

2021-02-26 14:28:07 96

原创 分解质因数

分解质因数思路若整数aaa是整数bbb的倍数,则aaa的每个质因数的幂次一定要大于等于对应的bbb的每个质因数的幂次。对于本题,要求最小的整数n,使得n的阶乘是p的倍数,则可以先对n的阶乘分解质因数,判断是否n阶乘的质因数的幂次大于p的质因数的幂次。在1~p中二分n的值即可。ll factory(ll n, ll s) { //n!对素数s的求解 ll sum = 0; while (n) { n /= s; sum += n; } r

2021-02-22 11:27:43 81

原创 二维差分

我们有一个矩阵,如下图所示。根据二维前缀和表示的是右上角矩形的和,由于差分只涉及前面相邻的数(由一维可以推出),并且由前面范围的数相加得到这个位置的数。那么类比二维前缀和和一维差分,可以简单推测出二维差分的公式(a为原矩阵数组,p为差分数组)p[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1]如何从差分矩阵得到原矩阵呢?可以参考下面公式(对差分数组求前缀和得到原数组)a[i][j] = p[i][j]+p[i-1][j]+p[i][j-1]-p[i-

2021-02-17 11:13:30 289 1

原创 开关问题 高斯消元 异或方程组

开关问题思路高斯消元,异或方程组。把增广矩阵的每一行进行你状态压缩,用一个Int类型的数组表示增广矩阵,数组中每个元素表示n+1位二进制数,第0位为增广矩阵最后一列常数,第1~n位分别表示增广矩阵第1到n列的系数。code#include<bits/stdc++.h>using namespace std;int a[100],ans;int n;int main(){ int t; cin>>t; while(t--) { cin>>

2021-02-09 20:34:43 88

原创 Period KMP

Period题意若字符串sss的前缀s[1~i],2 <=i <= n,是由长度为len的最小循环元循环k次而成,则输出这个前缀字符串的长度以及循环次数k。思路字符串sss的前缀s[1~i],2 <=i <= n,具有长度为len的最小循环元,则len能整除i,并且s[len+1 ~ i] = s[1 ~ i - len],既next[i] = i - len,所以最小循环元的长度len = i - next[i],循环次数为i / len。code#include&lt

2021-02-04 14:45:59 116

原创 巴什博弈

博弈论之巴什博弈问题模型① 两个人从nnn个物体中取,取物品,规定每次至少取一个,最多取mmm个,最后取光者得胜。结论:当n%(m+1)==0先手必败,否则先手必胜② 两个人从nnn个物体中取,取物品,规定每次至少取一个,最多取mmm个,最后取光者失败。结论:当(n-1)%(m+1)==0先手必败,否则先手必胜例题Seek the Joker Icode#include <bits/stdc++.h>using namespace std;typedef long long

2021-02-03 16:36:35 113

原创 字符串的问题 KMP

添加链接描述思路假设,next[n] = k ,意味着s0,s1,s2,s3,s4.....sk−1==sn−k+1,sn−k+2.....sns_0,s_1,s_2,s_3,s_4.....s_{k-1} == s_{n-k+1},s_{n-k+2}.....s_ns0​,s1​,s2​,s3​,s4​.....sk−1​==sn−k+1​,sn−k+2​.....sn​,子串即为s[0:k]s[0:k]s[0:k], 那么如何判断中间有没有子串呢?如果有子串,s[i:i+k]那么肯定s[0:i+k]

2021-01-29 23:04:12 56

原创 树上行走

树上行走思路用并查集维护集合个数,找到最大的集合,从小到大输出集合里面的元素,若有多个最大集合,从小到大依次输出。code#include<bits/stdc++.h>using namespace std;const int N = 2e5+5;int fa[N], val[N], n, son[N];void init(int n){ for(int i = 1; i <= n; i++) fa[i] = i, son[i] = 1;}in

2021-01-29 10:12:12 145

原创 记忆化搜索

地宫取宝AC代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 55;const long long mod = 1000000007;int n, m, k, mp[N][N], ans;int dx[2] = {0, 1};int dy[2] = {1, 0};ll dp[N][N][15][15];///dp[x][y][num][maxvalue]:///走

2021-01-12 12:04:58 77

原创 矩阵乘法

石头游戏思路状态矩阵:题目中的状态是一个n∗mn*mn∗m的矩阵,而一般情况下矩阵快速幂要求用一维向量作为状态矩阵,所以就把这个状态拉成长度为n∗mn*mn∗m的向量了原矩阵的(i, j) 为状态矩阵中的F[(i−1)∗m+j]F[(i-1)*m + j]F[(i−1)∗m+j],不妨令num(i,j)=(i−1)∗m+jnum(i, j) = (i-1)*m + jnum(i,j)=(i−1)∗m+j。那么在状态矩阵中就是F[num(i,j)]F[num(i, j)]F[num(i,j)]了。另

2021-01-09 22:23:00 116 1

原创 Fibonacci 矩阵乘法

Fibonacci斐波那契数题目链接DescriptionIn the Fibonacci integer sequence, F0F_0F0​ = 0, F1F_1F1​ = 1, and FnF_nFn​ = Fn−1F_{n-1}Fn−1​ + Fn−2F_{n-2}Fn−2​ for nnn ≥ 2. For example, the first ten terms of the Fibonacci sequence are:0, 1, 1, 2, 3, 5, 8, 13, 21, 34,

2021-01-09 21:05:25 210 1

原创 Sudoku

DescriptionSudoku is a very simple task. A square table with 9 rows and 9 columns is divided to 9 smaller squares 3x3 as shown on the Figure. In some of the cells are written decimal digits from 1 to 9. The other cells are empty. The goal is to fill the e

2021-01-05 23:24:56 141

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除