开篇
开篇 花了一天的时间,终于把网站给搭好了,中间虽然也遇到了一些问题,但不断检索解决问题的过程还是比较有趣的。从0到1地建立起自己的网站所获得内心的充实让我感觉时间没有白费。后续会在网站上加入更多的东西,作为网站建立的第一篇博客,不知道要写什么。本篇文章没有主题,仅仅记录一下最近对我触动比较深的想法。
1.人生苦短,记录下来 熵增定律告诉我们事物总是自发地,不可逆地朝着熵增加即混乱的方向进行。天地不仁,以万物为刍狗。宇宙在时间的尽头归于寂灭,人体在有限的时间限度里也会走向灭亡。人生短暂,我们需要记录,记录属于自己的时刻。按下快门,捕捉眼前看到的世界。关于日出,关于日落。正如那句歌词一样
“别错过日落和夕阳,不论在哪里呀”。
打开备忘录,用文字书写内心的感受。记下生活中的发光时刻便是我们在有限的人生范围内所能找到的最优解。这也是我建本网站的原因,记录所学,记录所感。
2.关于人生 我有时候总是会想,人这一生,该怎么去度过。上周末我看了《死亡诗社》这部电影,里面的老师说的一句话让我印象深刻。
“我步入丛林 因为我希望生活得有意义 我希望活得深刻 ...
重剑无锋,大巧不工
重剑无锋,大巧不工学习的过程就是将知识由外向内转化的过程,最近在知乎上看到一个学习建议说到了我的心上。学完一部分知识点之后,忘掉之前自己具体学过哪些,去泛刷这一大类的题目,避免出现”我刚学了一个高级算法,这道题肯定是这个高级的算法”这样奇怪的思考。想来自己也确实陷入过这种困境,在学习完一个新的算法之后,下面做题的时候总是会有意无意地想到脑子里最新学来的那个算法,从而使思维不能够发散,眼界变的狭隘。这就是不能把外在知识而转化为内在,不能达到知识彻底为我所用的境界。想要克服只有不断地训练,由记得转化为有如本能一般,终能不受原来招式所限,随意出招自成章法。就像《倚天屠龙记》学习剑法那样
“无忌,我教你的还记得多少?”
“回太师傅,我只记得一大半”
“那,现在呢?己经剩下一小半了”
“那,现在呢?”“我已经把所有的全忘记了!”
“好,你可以上了”
抑或是像风清扬说的那样
“学招时要活学,使招时要活使。
倘若拘泥不化,便练熟了几千万手绝招
遇上了真正高手,终究还是给人家破得干干净净。”
愿自己能勤学勤练,在学习算法这条路上能越走越远
人生不是轨道,是旷野
最近看到这样一句话
人生不是轨道,是旷野。
但是最近的日子让我感觉自己像在轨道上不断地行驶,也是因为之前没有提前准备吧导致最近过得很忙。简单以流水账记录一下最近的学习生活。
开学已经三周啦,忙起来就感觉时间过得很快。周日晚上爷爷奶奶给我打了个电话,询问一切可好。想起上次奶奶给我打电话是一周前的周末。仿佛就发生在前天。最近为了准备暑期实习每天都在学新的东西,这三周给我留下的好像只有知识的长进,并没有一些具体的能够回忆起来的场景,每天有课就去上课,上完课回到宿舍接着学习。想来也确实学了很多东西,从开学第一周还在犹豫选Java还是Go,选了go之后就开始深入学习啦。从学习基础语法开始,刚开始也是搜集学习路线什么的,感觉东西很多很杂,最后也渐渐明了啦,最开始看书感觉效率不高,听学长说直接上手做项目,找了个七天教程,发现有很多不懂的便去先看了语法的简明教程。然后看完b站《8小时转职golang工程师》跟着写了个一个小的聊天系统再到看七米老师的课程学习gin框架之后写了个小的web项目(一个ToDoList)。然后就是开始看七米老师的进阶课程啦,中间学到了很多开发的实用技巧,日志、配置、热加载 ...
同济校赛&牛客小白月赛
同济校赛&牛客小白月赛两串糖果原题链接 https://ac.nowcoder.com/acm/contest/34442/D
以vij 代表区间i-j的乘积和,revij代表反转之后的区间乘积和
dpi代表1到i的区间最优结果,考虑状态转移,该状态可以由前面区间[1,j] 加上[j+1,i]这一区间的不反转或反转的最大值。因此有状态转移方程dp[i]=max(dp[i], dp[j]+max(v[j+1] [i], rev[j+1] [i]));
1234567891011121314151617181920212223242526272829303132333435363738#include <bits/stdc++.h>#ifdef DEBUG#define debug(x) cerr<<__LINE__<<"行 [" << #x << "] = "<<x<< endl;#endifusing namespace std;typedef long ...
LCX的算法笔记Week-5
LCX的算法笔记Week-5DP题目来源 https://codeforces.com/gym/103373/problem/G建立一个有序容器map,键值为边的权值,值为该权值的所有边构成的vector
名为ans的map代表以某点为结尾的递增序列的所有方案
遍历map,即从小到大遍历所有边,每遍历一个vector,就会更新这个vector所存的边的端点的值
更新的时候,因为新加入一条边,方案数应先加1(区分该点是否在本次遍历中出现过)
再加上以另一点为结尾的方案数(即从x->y或y->x)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include <bits/stdc++.h>#define f first#define s secondusing namespace std;typedef long long ll;typedef pair<int,int> pii;map<int,ll> ans;map&l ...
LCX的算法笔记Week-4
LCX的算法笔记Week-4动态规划01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。
第 i 件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。
朴素版(从定义出发)
1234567891011121314151617181920212223#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e3+10;int n,v;int vi[N],wi[N];int f[N][N];int main() { cin>>n>>v; for (int i=1; i<=n; i++) { cin>>vi[i]>>wi[i]; } for (int i=1; i<=n; i++) { for (int j=0; j<=v; j+ ...
LCX的算法笔记Week-3
LCX的算法笔记Week-3数学知识给定一个正整数 n,请你求出 1∼n 中质数的个数
筛质数(埃氏筛)
1234567891011121314151617181920212223#include <iostream>using namespace std;const int N=1e6+10;int n,cnt,primes[N];bool state[N];void getprimes(int n){ for (int i=2; i<=n; i++) { if (state[i]) { continue; } primes[cnt++]=i; for (int j=i+i; j<=n; j+=i) { state[j]=true; } }}int main(){ cin>>n; getprimes(n); cout ...
LCX的算法笔记Week-2
LCX的算法笔记Week-2一题目来源:CCPC威海 https://codeforces.com/gym/103428/problem/G
没想到因为编译语言版本的问题超时了,因为codeforces提交语言太多,就随便选了个C++的,这随便一选就选到了个最慢的😤😤😤😤😤。害我那天晚上看了那么久也没发现问题所在。
这道题是组合数学的一道题,只要把阶乘和求模运算的逆元初始化好,就能求组合数啦。模运算的逆元用到了费马小定理(a(p-1)≡1(mod p)),同时除以a我们就能把a的倒数求模运算的值转换成a(p-2)求模运算的值,然后用快速幂把时间复杂度降下来就行了。很是巧妙。这道题求逆元的时候可以写成下面注释掉的形式,可以少算很多次,实测节省16ms。因为快速幂时间复杂度降到了很低的量级,所以直接求时间也不会长很久。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include <io ...
LCX的算法笔记Week-1
LCX的算法笔记Week-1详细记录一下一周里做的比较有意思的几道题
一题目来源:字节跳动网络赛
因为少写了个括号导致WA啦😩😩😩,以为是算法有问题,就让队友写并查集解法啦。导致浪费了太多时间。又间接导致了下面要说的题没时间加特判了,寄。看来还是要多加练习。这道题除了特判比较繁琐,其他的还行。很容易就能想到要想使交换的次数最少,只需要先将给定的无序序列排列成有序序列,然后从第一个数字往后遍历,遍历的过程中,若当前有序序列中数字所在的位置和之前不同,则交换一次,并把记录的交换次数加1。比如样例1的输入 2 4 5 1 3 ,先排成1 2 3 4 5。遍历当前有序序列,发现1原本在下标4的位置,这时候就把下标4位置上的数1和下标1上的数2交换,依次类推,可算出总共交换了3次。样例1的k为0,所以没有预先交换的操作,最大值最小值相等,即3。所以就需要记录下之前无序序列每个数的下标,因为数的值可能会到10的九次方,如果用数组来维护这一信息,肯定会爆掉,且全局变量的数组也最多开到十的六次方的级别,所以用哈希表来存储,通过数据直接访问下标。再多开个数组记下原本的无序序列。所以很容易就能求得最 ...