- 博客(52)
- 收藏
- 关注
原创 ODT(old driver tree)例题
输入 n(≤2e5) 和 q(≤2e5)。初始有一个长为 n 的字符串 s,所有字符都是 1,s 的下标从 1 开始。个替换操作,每个操作输入 L,R (1≤L≤R≤n) 和 d (1≤d≤9)。你需要把 s 的 [L,R] 内的所有字符替换为 d。对每个操作,把替换后的 s 看成一个十进制数,输出这个数模 998244353 的结果。
2022-11-03 10:26:26
197
原创 Java快速入门06
大致按以下情况,静态(属性,变量)大于动态(属性,变量),父类大于子类,属性的定义优先于构造函数,优先级一样看定义顺序,先定义先执行。java代码执行顺序。
2022-10-23 21:20:26
104
原创 数位DP(记忆化搜索)
例如,如果 digits = [‘1’,‘3’,‘5’],我们可以写数字,如 ‘13’, ‘551’, 和 ‘1351315’。每个结果包含十个用空格隔开的数字,第一个数字表示 0 出现的次数,第二个数字表示 1 出现的次数,以此类推。题目描述 给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。题目描述:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。这样的,形如前面5位中包含3位1,后面的部分可排列的情况是一样的,只要第一次算出。
2022-10-18 21:13:20
486
原创 C++ 读入加速
c++的 cin,cout在没解除绑定读入速度很慢,加速的方法如下(注:加速后不能再与scanf,printf等混用)#include <iostream>using namespace std;int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); return 0;}...
2022-03-29 15:57:10
594
原创 Codeforces 52C
C. Circular RMQ题目大意:好激动,带懒标记的上百行的线段树带A掉这道题,线段树真好玩,可以看出来是裸的带懒标记的线段树难点1:读入的时候怎么判断是3个数还是2个数,看快读最后有无读入空格,如果读入了space就等于1难点2:线段是环形的l <= r正常区间,l > r 就讲区间分成 1 ~ r, l ~ n, 读入的是0~n-1我们处理成1 ~ n难点3:线段树和懒标记,我也是初学者不会讲,找大佬学呗Ac code#include <bits/stdc
2021-12-18 22:04:04
405
原创 P3372 【模板】线段树 1
P3372 【模板】线段树 1这一题是线段树懒标记的入门,懒标记的思想就是,当查询或者更改时,需要用到某段区间,那么我们就去将需要用到的区间传递下去,否者我们不动他,像不像你不用的知识不复习,用的时候再复习呢?#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;int w[N];struct Node{ ll l, r, sum, lazy;
2021-12-17 18:20:41
126
原创 树状数组 + 离散化 求逆序对数量
AcWing 788. 逆序对的数量#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;int nums[N], tr[N];vector<int> dc; //离散化的数组int Idx(int x){ return lower_bound(dc.begin(), dc.end(), x) - dc.begin() + 1; //返回
2021-12-16 17:59:04
270
原创 带权并查集
How Many Answers Are Wrong图解合并的时候代码如下#include <iostream>using namespace std;const int N = 2e5 + 10;int p[N], dist[N]; //并查集数组 距离数组int find(int x){ if(x != p[x]) { int f = p[x]; //保存父节点 p[x] = find(p[x]); /
2021-12-07 19:45:25
499
原创 AcWing 4801 选数(二维费用背包的建立)
AcWing 4180.选数字问题描述:给定 n 个整数 a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。请你从中选取恰好 k 个数,要求选出的数的乘积的末尾 0 的数量尽可能多。请输出末尾 0 的最大可能数量。输入格式 第一行包含两个整数 n,k。n,k。n,k。第二行包含 n 个整数a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。输出格式 一个整数,表示末尾 0 的最大可能数量。数据范围 前 6 个测试点满足 1≤n,k≤101≤n
2021-11-28 22:32:29
171
原创 快速幂(一个简单快速适合整数幂次的运算)
引文快速幂为什么快速呢,应为它将幂次方O(N)的复杂度降到了O(log2N)O(N)的复杂度降到了O(log_2^N)O(N)的复杂度降到了O(log2N),主要思想是将指数转换成二进制表示,然后分解乘法,例如51005^{100}5100是100个5相乘,但任何一个整数都可以用二进制的形式表示,例如100=(1100100)100 = (1100100)100=(1100100), 所以5100=564∗532∗545^{100} = 5^{64} * 5^{32} * 5^45100=564∗53
2021-11-23 18:23:54
664
原创 二分常见的写法
二分常用于单调区间搜索答案,其作用是将O(N)O(N)O(N)的线性查找转化成O(logN)O(logN)O(logN)的二分查找常见的二分模板如下1.新手最开始学习理解的int binary_search1(int l, int r) //搜索某个值存在否 { while(l <= r) { int mid = l + r >> 1; int f = check(nums[mid]); if(f == 0) return mid; else.
2021-11-22 20:42:10
595
原创 Dijkstra(迪杰斯特拉)算法的总结
应用领域常用于在正权图中求单源最短路,经常是起点到其他点的最短路,最大路,或者是找通路中所有最大边中的最小边(最大),通路中所有最小的边的最大边(最小)等,视情况而定算法思想:Dijkstra算法是基于贪心来实现的,例如在求最短路时,有点(1~n)将起点1设为0,然后起点到其他点的值设为无穷,利用当前确定可达最短路来更新其他点,就是是点1到点x的距离是否比当前可达最短路点1到点t和点t到点x更远(有点像绕路比较),如果更远则更新,每次迭代可确定一个可达最近点,然后将其标记,那么n个点n-1次迭代
2021-11-22 12:22:01
1829
原创 Candies-POJ 3159
Candies-POJ 3159题目大意输入n和m,n为点数,m为边数,后面有m行表示点a和b之间的差值不超过c,问1和n直接的差最大是多少?题解堆优化版dijkstra跑,利用差分约束dist[t] + w < dist[j]#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;struct no
2021-11-21 23:43:43
365
原创 long double(64bit)
long double的输入输出long double f;scanf("%Lf", &f);printf("%Lf\n", f);顺带一张优先级图
2021-11-20 23:40:47
342
原创 POJ 2240 Arbitrage(SPFA判正环)
POJ 2240 Arbitrage题目大意套利是指利用货币汇率的差异,将一种货币的一个单位转换为同一货币的多个单位。例如,假设1美元买0.5英镑,1英镑买10.0法国法郎,1法国法郎买0.21美元。然后,通过兑换货币,聪明的交易者可以从1美元开始,购买0.5 * 10.0 * 0.21 = 1.05美元,获利0.05美元。您的工作是编写一个程序,以货币汇率列表作为输入,然后判断是否存在可能进行套利。提示判正环的SPFA,任意货币都可以作为起点,不仅仅是美元,所以开始将所有点都入队,并判断正
2021-11-19 18:16:00
263
原创 Currency Exchange (POJ 1860)
Currency Exchange思路:用spfa来找正环,只要存在一个正环(cnt >= n),那么走这个圈穷次后资产一定无穷,因为路是双向的,所以一定可以返回,正无穷再怎么亏损,一定还是正无穷AC Code#include <iostream> #include <cstring>#include <cstdio>#include <queue>using namespace std;const int N = 202
2021-11-18 18:52:01
796
原创 快速读写模板
快读inline int read(int x) { int f = 1, x = 0; char c = getchar(); while(c < '0' || c > '9') { if(c == '-') f = -1; c = getchar(); } while(c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); } return f * x;}.
2021-11-17 10:14:48
206
原创 Silver Cow Party
Silver Cow Party(POJ-3268)思路:跑堆优化版dijkstra,从x到其他任意点,然后其他n-1个点跑一个dijkstra到x点,两者相加求最大值,复杂度O(nlog(m))O(nlog(m))O(nlog(m))#include <iostream> #include <cstdio>#include <queue>#include <cstring>using namespace std;typedef pair
2021-11-16 23:07:50
653
1
原创 链式向前星(一个优秀的存储图的数据结构)
在学习图的存储的时候,我们通常会有邻接矩阵和邻接表两种选择,邻接矩阵好写但效率低,邻接表不好写写但效率高,这里有一种优秀的数据结构,那便是用静态链表头插法实现的链式向前星。先给出一下邻接矩阵可以看出有向图中有4个顶点4条边1 —> 21 —> 32 —> 43 —> 1那么用链式向前星该怎么存呢?字丑的见不得人啦,对于每个顶点u,我们都会有h[u]代表其指向的第一个边的idx,然后e[idx]是指边v,w[idx]指边u-v的权重,ne[idx]是指链上的下.
2021-11-16 19:10:07
1823
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人