二分(手搓)一.找出第一个大于等于 x 的元素1234567891011121314151617181920212223#include <iostream>#include <algorithm>using namespace std;int a[200005];int main(){ int n, x; cin >> n >> x; for (int i = 1; i <= n; i++) cin >> a[i]; int z = 1, y = n; //核心代码 while (z <= y) { //这里其实mid = (z + y) / 2,而下面的写法是为了防止有时候爆int int mid = z + (y - z) / 2; //下面两个条件判断,哪个不取等,就输出哪个 if (a[mid] >= x) y = mid - 1; else z = mid + 1; } cout << z; //cout << y + 1 ...
算法笔记
未读取余公式(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p ) % p
(a * b) % p = (a % p * b % p) % p
快速幂利用倍增思想,当求解 a 的 b 次方时,代码如下
12345678910111213141516171819202122232425262728#include <iostream>using namespace std;using ll = long long;ll quik_pow(ll a, ll b){ //temp存放 a^1, a^2, a^3, a^4....... ll temp = a; ll ans = 1; while (b) { //判断b的二进制的最后一位是否为1,是1就算入总结果 if (b & 1) ans = ans * temp; //随着b的二进制右移逐渐递变 temp = temp * temp; //b的二进制右移(舍弃最后一位 b >>= 1; & ...
题目12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <iostream>#include <queue>using namespace std;struct ty{ int z, y;}a[500005];int vis[500005];void xian(int f){ cout << f << ' '; if (a[f].z) xian(a[f].z); if (a[f].y) xian(a[f].y); return ;}void zhong (int f){ if (a[f].z) zhong(a[f].z); cout << f << ' '; if ( ...
由于 24 号正式开学,我在昨天晚上返校,从福建到湖北武汉,本一切顺利,但今天突然发现我的博客竟然上传博文的时候报错了?!!原因竟然是因为学校的防火墙阻断了我与 github 的 ssh,以下就是今天解决过程。
上传博文时出现如下图报错
在官网的常见报错中并没有找到对应的解决方法,之后上网查询得知:如果是在公司或学校网络,可能会存在防火墙或代理限制,阻止了 SSH 连接。
于是我在git bash中输入
1ssh -T [email protected]
出现报错如图所示
错误表明 SSH 连接被拒绝,通常是由于网络问题或 SSH 配置问题导致的。
这里更符合防火墙或代理限制,阻止了 SSH 连接(端口 22)的猜想。
于是开始尝试解决这个问题。
一.切换到 HTTPS 端口(443)GitHub 支持通过 HTTPS 端口(443)进行 SSH 连接。如果你的网络屏蔽了端口 22,可以尝试下面的方法(windows)
1.打开 SSH 配置文件:文件路径:C:\Users<你的用户名>.ssh\config。
如果文件不存在,可以手动创建
2.添加以下内容:123Host ...
八种排序三种 O(n ^ 2)的排序:冒泡,选择,插入
三种不基于比较的排序:桶,基数,计数
最后是:归并排序,快速排序
一.冒泡排序较简单,直接代码注释结合理解即可
1234567891011121314151617181920212223242526272829#include <iostream>using namespace std;int main(){ //给定乱序数组a int a[10] = { 1, 10, 4, 2, 3, 8, 5, 9, 7, 6 }; //这里令n = 10,方便给出通解 int n = 10; //两层循环,内层做从左到右遍历数组中未排序元素,并进行比较操作;外层每次去除已定序元素,限制下一次内循环排序范围。 //外循环一共循环n - 1次,因为每一次外循环结束可以定下一个元素的位置,到第n - 1次排序完成,就只剩下一个元素,自然不用再排序。 for (int i = 0; i < n - 1; i++) { //内循环 ...
大一寒假1 月 13 号晚上到家,寒假开始,返校车票是 2 月 22 号。然后今天是 2 月 19 号,去除明天开始的两天要去找我姐。整个寒假有 37 天,由于报名寒假集训,年前年后各有三场比赛。
年前,这段时间学习较无目的性,基本都是因为几天一场比赛,赛时写题,赛后补题,其余时间也得四处奔走聚会。
年时更是忙,走亲访友的,当然没有很好的学习节奏,但好在放假到年时,生活节奏较好,作息好,身体有所改善。
年后,又是要面对三场比赛,但除了打比赛,也开始重新学习算法,目前过完模拟,枚举,贪心,接下来就到递归。用手机延时摄影记录学习,并发布社交媒体,这样做好处好多!在学习过程中终于可以专心,没有再时不时停下玩手机,不仅提高效率,还有监督效果。整个寒假虽说不上努力,但至少代码没荒废,算法也有学习,同时解决了原博客服务器到期,还搞了新博客。当然也有遗憾的事,整个寒假的英语那真是一点没学啊,而且!我的半马没有中签!!!和我一起报名的朋友在二补时中了。。。酸了。
还有一件有趣的事情,在新年当天晚上,我才得知 deepseek 发布引动全球的事情,这 ai 实在是一言难尽,真的太强了,放寒假前我甚至还想 ...
大一寒假题单
body {
background-color: #121212; /* 设置背景为深色 */
color: #f1f1f1; /* 设置文字颜色为浅色,以便在黑色背景上更清晰 */
font-family: Arial, sans-serif;
}
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
font-family: Arial, sans-serif;
}
th, td {
border: 1px solid #444; /* 改为深色边框,和背景更加契合 */
padding: 8px;
text-align: left;
...
贪心算法贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。而局部交叉型贪心是其中的一类体型(名字我自己取的
局部交叉型贪心题中常常是从顺序角度入手,例如有多个部分,不同的顺序对待这些部分会有不同的效果,而贪心就是得到最符合要求的效果的顺序。假设一道题有 A - B - C - D - E 五个部分,而最终的贪心顺序假如是 E - D - C - B - A 此时如果发现任意相邻两者的交换,对前面和后面都没有影响,只有对交换的双方有影响,就属于这类题型,我称它为 局部交叉型
例题题目大意:n 个活动,每个活动有 需要时长 C 和 截止时长 D 两个量,同一时间只能完成一个活动,对于每个活动最后完成时,超出它的截止时长的部分,加入总扣分,问使得总扣分最少的情况是多少?分析:1.假设最优策略中 a,b 活动相邻。即。。。ab。。。。
2.发现a和b交换顺序后,对前面和后面的所有任务的完成情况没有影响,只有影响a和b自己--->“局部”
3.设ab前面所花时间为 t
4.交换ab前,a的扣分a1:(t + Ca - Da) b ...
算法笔记
未读六六表(自己瞎取的名字前言:之前好几次做到关于质数的构造题,在去年的新生菜鸟杯遇到,以及寒假集训也遇到很多次,没有方法,所以经常做不出,而且还要花很多时间。。。现在学到了六六表,一种打表方式,具体如下01 02 03 04 05 06
07 08 09 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
37 38 39 40 41 42
43 44 45 46 47 48
.................
上表的规律 2 的倍数:第二列和第四列 4 的倍数:第四列
3 的倍数:第三列和第六列 6 的倍数:第六列
所以所有的质数一定在第一列或者第五列中,也就是 6n+1 或者 6n-1
从中可以衍生互质问题例题
算法笔记
未读位运算符号左移 <<右移 >>或 |与 &取反 ~异或 ^ (异或 0 不变,异或 1 取反)
位运算基础去掉最后一位 x >> 1在最后加一个 0 x << 1在最后加一个 1 (x << 1) + 1 或者 (x << 1) | 1把最后一位变成 1 x | 1把最后一位变成 0 (x | 1) - 1最后一位取反 x ^ 1把右数第 k 位变成 1 x | (1 << (k - 1))把右数第 k 位变成 0 x & (~ (1 << (k - 1)))右数第 k 位取反 x ^ (1 << (k - 1))
位运算妙用(实例)当题目出现需要枚举 数个有且仅有两个状态的东西时,可以利用二进制循环枚举题目本题大意:输入一个矩阵值和回合数,每个回合得到一行或者一竖的值的和,且被得到过的地方值变为 0,问得到的最大总值是多少?
分析本题考查贪心,枚举发现每次不同的选择,会对之后的贪心选择造成影响(因为被选值变成 0)这样子问题会十分复杂。发现选择的顺序对总值没有影 ...