liaoyu
辽宇
强者明理自理,弱者优柔寡断.
展开
-
操作系统分页、分段
操作系统原创 2022-11-27 12:00:37 · 792 阅读 · 0 评论 -
二叉搜索树、红黑树、B树、B+树
树原创 2022-11-18 10:57:44 · 303 阅读 · 0 评论 -
力扣-第 319 场周赛
力扣周赛原创 2022-11-17 11:26:43 · 203 阅读 · 0 评论 -
Template模式(以InputStream源码为例)
设计模式原创 2022-11-17 10:55:26 · 407 阅读 · 0 评论 -
ThreadLocal详解(应用及底层原理)
Java ThreadLocal 原理及应用详解原创 2022-11-16 15:49:31 · 533 阅读 · 0 评论 -
Java String类型底层剖析
Java底层原理原创 2022-11-04 22:28:54 · 267 阅读 · 0 评论 -
力扣第317场周赛最后一题——移除子树后的二叉树高度(贪心)
无原创 2022-11-02 21:42:23 · 174 阅读 · 0 评论 -
CSP-DHCP服务器
CSP第三题原创 2022-10-04 17:47:40 · 313 阅读 · 0 评论 -
CSP-脉冲神经网络
CSP原创 2022-10-03 18:29:47 · 270 阅读 · 0 评论 -
矩阵快速幂模板+fab矩阵加速递推
线性代数原创 2022-10-02 17:14:00 · 127 阅读 · 0 评论 -
CSP-防疫大数据202209-3
CSP原创 2022-10-01 14:36:17 · 1642 阅读 · 0 评论 -
CSP-序列查询新解
CSP第二题原创 2022-09-28 14:17:18 · 394 阅读 · 0 评论 -
CSP-计算资源调度器
CSP第三题模拟原创 2022-09-22 14:26:55 · 540 阅读 · 0 评论 -
CSP 2021-6 角色授权
算法模拟题原创 2022-09-12 16:29:06 · 468 阅读 · 0 评论 -
引入移码的目的
计算机表示浮点数难免会有精度损失。(表示分母是2的幂的浮点数可以完美表示)计算机IEEE标准规定计算机浮点数由三部分构成:符号位(s)、阶码(exp)、尾数(farc)single精度与double精度以及32、64位机表示阶码和尾数使用的bit都各不相同,一般来说,位数越多,精度越高。在规格化浮点数的时候,常常会规格化为1.xxxx的形式,因此比较浮点数的大小会十分方便。在比较浮点数的时候,由于是统一形式,人可以一眼比较出十进制中三位数大于两位数,因此大多数时候只需要比较阶码的大小即可比较出浮点数原创 2022-09-04 21:52:45 · 1110 阅读 · 0 评论 -
计算机底层-关于隐式转换和补码(困扰了我好几个月的问题)
问题:C语言程序在32位机器上运行。程序中定义了三个变量X、Y、Z,其中X和Z是int型,Y为short型。当X=127,Y=-9时,执行赋值语句Z=X+Y后,X、Y、Z的值分别是多少?(十六进制数表示)首先,计算机采用补码计算。按照正常的思路是这样的:很遗憾,这样是错误的!下面解释原因(困惑了我好几个月)先说答案:Z = 00000076H为什么会是这样?我的第一反应是答案错了。事实真是如此吗?我试着输出一下127的二进制:int x = 127;for(int i=31;i>原创 2022-05-05 13:24:52 · 927 阅读 · 1 评论 -
菁英班OJ赛2022-2-24(第一周)
题目链接目录文章目录目录一、硬币塔二、判断三角形三、星图四、非常大的N五、两条线段一、硬币塔题目:思路:预处理出每一级的总金币数,和每一级的规模。按照递归的思想进行dfs。注意特判边界就行了(n可以等于0).代码:#include<bits/stdc++.h> using namespace std;long long f[45]; //每一级的总金币数.long long sz[45]; //每一级的规模long long n,m;lon原创 2022-04-24 15:13:01 · 1545 阅读 · 0 评论 -
飞行员兄弟(暴力)
题目链接AcWing 116.#include <bits/stdc++.h>using namespace std;char s[5][5];char b[5][5];bool check(){ for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(b[i][j]=='+') return false; return true;原创 2022-04-12 12:26:17 · 233 阅读 · 0 评论 -
最高的牛(差分)
题目链接AcWing 101.思路:记每头牛的初始身高为H,若a,b两头牛能看见,则他们之间的牛身高减一即可。利用差分数组记录区间修改即可。注意重复关系不要重复处理。/* 思路:记每头牛的初始身高为H,若a,b两头牛能看见,则他们之间的牛身高减一即可。 利用差分数组记录区间修改即可。注意重复关系不要重复处理。*/#include <bits/stdc++.h>using namespace std;int a[5050];int main(){原创 2022-04-12 12:26:00 · 151 阅读 · 0 评论 -
最佳牛围栏(二分、难点)
题目链接AcWing 102.思路易错点在代码上部。/* 二分平均值. 题目中有长度不小于L的限制(len>=L) check时判断是否存在sum - len * avg >= 0 可以转化为是否存在子段和sum(a[i]-avg)非负,且子段长度不小于L 子段和sum用前缀和维护. for(int i=1;i<=n;i++) b[i] = a[i] - avg; int minn = 1e9; int原创 2022-04-12 12:25:24 · 267 阅读 · 0 评论 -
七夕祭(贪心、难点)
题目链接AcWing 105.思路分析易错点均在代码中。/* 1.思考什么时候输出impossible 2.思考横向交换是否影响竖向交换? 不影响。 3.单独考虑一维的最少交换情况(这里讨论行,使得每一列数量均相等) 考虑均分纸牌问题,这里是环形均分纸牌问题. 分析: 均分纸牌: 记S[i]为第i个人获得了S[i]张牌(为正则为获得牌;为负则为给出牌)原创 2022-04-12 12:24:41 · 185 阅读 · 0 评论 -
增减序列(思维、难点)
题目链接AcWing 100.分析:区间操作,先转化为差分数组形式,那么最终答案的差分数组应该是 x 0 0 0 0 0 0 … 的形式。题目转化为:每次让差分数组的一个位置+1(或-1),另一个位置-1(或+1),位置的范围可以选择[1,n+1](1)使数组达到目标形式的次数最少容易想到一种贪心的策略:当数组中不存在负数时:一个位置选择非0的[2,n]的位置,另一个位置选择1或n+1即可。当数组中不存在正数时:同理。当数组中正负数都存在时:先每次选择一正一负,直到正数选完或者负数选完原创 2022-04-12 12:23:40 · 407 阅读 · 0 评论 -
激光炸弹(前缀和)
题目链接AcWing 99.思路在代码中。/* 目标数量10000,枚举每个目标作为矩形左上角,计算二维前缀和.*/#include <bits/stdc++.h>using namespace std;int n,r;int a[5050][5050];int main(){ std::ios::sync_with_stdio(false);std::cin.tie(nullptr); cin >> n >> r;原创 2022-04-11 21:38:18 · 124 阅读 · 0 评论 -
约数之和(分治,公式变形)
题目链接AcWing 97.本题有两种方法,公式法与求逆元,这里使用逆元求等比数列的和注意逆元不存在的情况(代码中有标注)/* 1.分治法 2.同余逆元 对于(a/b)%MOD 逆元不存在:等价于b % MOD = 0*/#include <bits/stdc++.h>using namespace std;typedef long long ll;const int MOD = 9901;int p[50000010],原创 2022-04-11 21:36:50 · 152 阅读 · 0 评论 -
费解的开关(状态压缩)
题目链接AcWing 95.思路:先枚举第一行的状态,再依次判断其他每个位置是否需要操作。代码:#include <bits/stdc++.h>using namespace std;char s[7][7];char b[7][7];int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};void calc(char &c){ c = (char)(((c - '0') ^ 1) + '0');}void tr原创 2022-04-11 21:34:36 · 153 阅读 · 0 评论 -
递归实现排列型枚举(搜索)
题目链接AcWing 94.代码:#include <bits/stdc++.h>using namespace std;int a[11];int main(){ int n; cin >> n; for(int i=1;i<=n;i++) a[i] = i; do{ for(int i=1;i<=n;i++) cout << a[i] <<原创 2022-04-11 21:32:44 · 125 阅读 · 0 评论 -
递归实现组合型枚举(搜索)
题目链接AcWing 93.代码:#include <bits/stdc++.h>using namespace std;int book[30];int n,m;void dfs(int sz,int maxn){ //maxn记录当前最大值. if(n-maxn+sz<m){ //剪枝. return; } if(sz==m){ for(int i=1;i<=n;i++)原创 2022-04-11 21:31:41 · 115 阅读 · 0 评论 -
递归实现指数型枚举(搜索)
题目链接AcWing 92.代码:#include <bits/stdc++.h>using namespace std;int main(){ std::ios::sync_with_stdio(false);std::cin.tie(nullptr); int n; cin >> n; cout << "\n"; for(int i=1;i<1<<n;i++){ for(int原创 2022-04-11 21:30:26 · 113 阅读 · 0 评论 -
起床困难综合症(位运算)
题目链接AcWing 998.题意:最初攻击力不知道,给定m次位运算操作,计算经过m次位运算操作后的最大值。思路:在代码顶部混合位运算不具有分配律,交换律,结合律// 存在多个不同的位运算符号时,不具有结合律,因此不能先算后面/* x & 5 | 6 ^ 7 != x & (5 | 6 ^ 7) x = 2时,左边为1,右边为0*/// 思路:按位去判断,从高到低枚举每一位的两种情况.// 2^30 > 1e9#include <原创 2022-04-11 21:28:55 · 148 阅读 · 0 评论 -
最短Hamilton路径(状压DP)
题目链接AcWing 91.代码:(思路在注释)#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 21,M = 1 << N;int w[N][N];int f[M][N]; // 经过点的状态 ----- 当前所在的点.int main(){ int n; cin >>原创 2022-04-11 21:25:59 · 145 阅读 · 0 评论 -
64位整数乘法(类快速幂)
题目链接AcWing 90.代码#include <bits/stdc++.h>using namespace std;typedef long long ll;ll quick_mod(ll a,ll b,ll p){ ll res = 0; while(b){ if(b&1) res = (res + a) % p; b >>= 1; a = a * 2 % p; } re原创 2022-04-11 21:24:38 · 125 阅读 · 0 评论 -
a^b(快速幂)
题目链接AcWing89.代码#include <iostream>using namespace std;typedef long long ll;ll quick_mod(ll a,ll b,ll MOD){ ll res = 1; while(b){ if(b&1) res = res * a % MOD; b >>= 1; a = a * a % MOD; } retu原创 2022-04-11 21:23:20 · 169 阅读 · 0 评论 -
容斥原理babiQ
容斥原理:选择了奇数个集合则加、偶数个则减,利用二进制状态压缩枚举所有情况。ABC_246_F:题目链接题意:给定N个字符串,从中间选择一个字符串中的字符可以任意重复使用,组成长度为L的字符串有多少种方案。1≤N≤18.tips:看题目范围,枚举每一种情况,复杂度在2^n级别tips:结合上面提到的容斥原理,利用bitset内置函数set()统计1的个数.bitset<26> b[20];void solveF(){ ll n,l; cin >>.原创 2022-04-05 15:19:48 · 405 阅读 · 0 评论 -
李煜东算法进阶指南打卡题解
算法竞赛进阶指南一、0x00 基本算法1)位运算2)递推与递归3)前缀和与差分4)二分5)排序6)倍增7)贪心8)习题二、0x10 基本数据结构1)栈2)队列3)链表与邻接表4)Hash5)字符串6)Trie字典树7)二叉堆8)习题三、0x20 搜索1)树与图的遍历2)DFS3)剪枝4)迭代加深5)BFS6)广搜变形7)A*8)IDA*9)习题四、0x30 数学知识1)质数2)约数3)同余4)矩阵乘法5)高斯消元与线性空间6)组合计数7)容斥原理与Mobius函数8)概率与数学期望9)0/1分数规划10)博原创 2022-04-05 15:07:37 · 2221 阅读 · 2 评论 -
树状数组babiQ
树状数组,这工具人真好用,补下模板题,一家人就要整整齐齐。AcWing 241. 楼兰图腾题目链接四个月前写了一次,现在又写了一次,两次虽处理方式不同,异曲同工.#include <bits/stdc++.h>using namespace std;#define int long longtypedef long long ll;const int N = 200010;int tr[N];int a[N],rt[N],lf[N];int n;int lowb原创 2022-04-05 14:59:07 · 456 阅读 · 0 评论 -
并查集babiQ
AcWing 237. 程序自动分析题目链接典型的并查集题目,利用题目约束的传递性做题。此题既不需要带权,也不需要拓展域。注意题目范围,需要先进行离散化处理(并查集的题目一般都需要进行离散化处理)离散化void my_read(int n){ int i,j,e; total = 0; for(int k=1;k<=n;k++){ scanf("%d%d%d",&i,&j,&e); query[k] = (Q原创 2022-04-05 14:50:19 · 889 阅读 · 0 评论 -
AcWing 145.超市(二叉堆)
题目链接这道题在李煜东进阶指南里讨论了两种解法,都是基于贪心的思路,借助不同的数据结构,从而很好的达到目的。这里讨论二叉堆的解法。看到这道题,想到了白书汽车加油问题,在某个站点加不加油取决于在后面行驶过程中油是否用完,如果油用完了,就选择所经过加油最多的站点加油。油用完了再进行加油,相当于在之前就选择了加油。此题也是一样,基于一种贪心的策略,先按照过期时间从小到大排序,创建小根堆,堆中维护的是暂时选择的商品的利润。遍历每一个商品,如果当前商品没有过期,则直接把这件商品扔进堆中;否则与堆顶元素比较,原创 2022-04-05 14:20:11 · 875 阅读 · 0 评论 -
重载小于运算符<
struct Node{ int w; bool operator<(Node a)const { return a.w<w; }}node[5];优先队列默认大根堆+重载小于运算符=小根堆#include <bits/stdc++.h>using namespace std;struct Node{ int w; bool operator<(Node a)const { return a.w<w; }}node[5];原创 2021-12-05 12:25:52 · 978 阅读 · 3 评论 -
python问题整理
python为什么不需要声明变量,是一种怎样的运行模式?字节串与字符串的区别与联系?Python中字节串和字符串,不是一个概念却没有区别之分py可迭代对象:# 第二章''' map()函数把一个函数依次映射到每一个元素上 《映射》 返回一个可迭代的map对象,但map()函数不对原序列进行任何修改.'''print(tuple(map(str, range(5))))print(list(map(str, range(5))))# print(dict(m.原创 2021-12-02 12:00:01 · 244 阅读 · 0 评论 -
离散化深入总结之三种离散化的方式——保序与不保序
文章目录前言一. 保序且保留绝对关系1. unique2. erase3. 注意lower_bound的使用,下标要+1(大多数情况)4. 离散化模板5. 练习二.保序且保留相对关系三.不保序只保存元素前言离散化用途广泛,很多时候数的区间很大,而数据量却很少,这时可以使用离散化的操作。离散化是一种类似哈希的思想,这里总结三种离散化方式(C++语言),包括保序和非保序离散化,保留绝对关系和保留相对关系的离散化。一. 保序且保留绝对关系这种离散化的方式实质是:压缩空间。这种离散化方式借助C++ .原创 2021-12-02 11:41:34 · 2002 阅读 · 0 评论