2025年3月月记

news/2025/3/23 3:12:49/文章来源:https://www.cnblogs.com/ask-tang/p/18744737

2025.3.1

新的一月到来啦!今天干了个啥呢?好像没干啥也是把昨天编程学习的作业做了,待会又要去学S组的知识了,我先去刷题了。。。
OK啊,也是把课学完了,待会我又要去打atcoder了,今天学的是差分约束,其实就是图上的知识,主要的表达形式是:u <= v + w或者u >= v + w或者......他的考点特别灵活,也是偏数学知识,对我的数学也是有着肥肠大的帮助(他也可以这样考:小a只记得区间u~v的白菜数最多有/最少有/只有w个,分别可以转换成v - u <= w / v - u >= w / v - u == w,再把这里的v移到w那边基本上就会的到一个最长路/最短路的算式,之后再拿bellman或者各种单元最短路来求得答案即可)。
打完atcoder了,这次也是有了很大的突破,终于自己把第五题AC了!简单的总结一下atcoder第五题的知识点吧。。。题目传送门

思路

一眼图论题好像说了句废话,表达方式跟单源最短路不能再像了,但有一点不一样,那就是可以花费x点的代价让所有的边转换方向(因为题目给的边都是单向的嘛)。然后我就很智慧的直接建了个边权为x+1的反边,就高兴地拿到了0分。。。为什么没AC?我们来考虑一种情况,如果题目给出了一条边为u-->v,我们建了一条边为u到v边权为1的边,又建了一条边为v到u边权为x+1的边,然后题目有给出了一条变为v-->u,计算机:。。。我:不是你怎么还不算,说!计算机:。。。
那么该怎么才能正确的解决这个呢?其实就是建新边。那该怎么建新边呢?当然是多开n个空间,然后在多开的那n个空间中建反边,除了出现重边的情况,不然不会出现上述情况。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long//记得开long long
const int N = 2e5 + 10;
struct Node{//邻接表存图int x, w;
};
struct pq{//Dijkstra专用优先队列结构体int x, dis;bool operator<(const pq& a) const{//重载运算符return dis > a.dis;}
};
vector <Node> mp[2 * N];//考虑到反边,所以把数组开成两倍大小
int n, m, x, dis[2 * N];//dis数组一样
void Dijkstra(int st){//Dijkstra模板priority_queue <pq> q;//Dijkstra得用优先队列memset(dis, 0x3f, sizeof dis);dis[st] = 0;q.push({st, 0});while(!q.empty()){pq t = q.top(); q.pop();if(dis[t.x] != t.dis) continue;//优化,因为是优先队列顺序是不固定的,所以判断该点是否已经展开加修改了for(auto nxt : mp[t.x]){int y = nxt.x, w = nxt.w;if(dis[t.x] + w < dis[y]){//最短路dis[y] = dis[t.x] + w;q.push({y, dis[y]});}}}
}signed main(){cin >> n >> m >> x;while(m --){int u, v; cin >> u >> v;mp[u].push_back({v, 1});//建边mp[v + n].push_back({u + n, 1});//这是反边,也就是如果要花费x个代价后能这样走}for(int i = 1; i <= n; i++){//建立一个能把两个相同的点连接的边,边权为x,也就是建立一个能够转换边缘的边mp[i].push_back({i + n, x});mp[i + n].push_back({i, x});}Dijkstra(1);//模板cout << min(dis[n], dis[2 * n]) << "\n";//判断是在转换后的点n代价更少还是没有转换的点n代价更少return 0;
}

2025.3.2

今天一大早就起来去上课了,学的是数学,应为我天生的聪敏材质提前一节课完成了课中的任务。。。导致后面我无聊到开始做作业(真是六了,传奇),好心的老师看我太无聊就给了我一套卷子,我一看:“哦~~原来就是期末测验题啊。”,再看:“???什么玩意,期末测试题,今天不是第二节课吗?怎么期末了??!!!"我的表情:六,盐都不盐了。
中午一点半左右回到了温暖的家,看了亿会电视就开始下午的联系了,先花了亿点时间完成学校作业,又改了一下小明月赛的题(但是只改了div3的,div2的一个不会改,一个不知道错哪了,一个完全没思路,主要还是它没标程),洛谷又做了一道题,虽然是黄题,但是花了我不少时间,是一道dp,也不知道具体是什么dp,因该属于二维dp,这是题目。我就简单的整理一下吧。

思路

我一开始是这样做的,设f[i][j]为在前i个箭头中,走了j步能够获得的最大价值,那么转移方程就好弄了,主要分为两个部分,第一:我不走这个箭头。第二:我要走这个箭头。那两个部分我们依次完成。

如果我不走这个箭头

那么我的步数肯定不会大于等于i(因为我不可能在一秒钟走两秒,它本身是矛盾的),然后一定是根据前i-1推来的,所以代码如下:

for(int i = 1; i <= n; i++)for(int j = 0; j < i; j++) f[i][j] = f[i - 1][j] - a[i];
如果我不走这个箭头

那么我的步数肯定不会大于i(原因同上,能等于也是因为我走了)小于1(因为我至少走了一步),而因为当前我要走这个箭头,所以状态是根据前i-1个箭头走了j-1次推来的,还要注意走的步数是T的倍数这个问题,要加b[i]。代码如下:

for(int i = 1; i <= n; i++)for(int j = 1; j <= i; j++)if(f[i - 1][j - 1] + a[i] > f[i][j]){f[i][j] = f[i - 1][j - 1] + a[i];if(j % T == 0) f[i][j] += b[i];}

最终把他们融合在一起即可,但是出了一些小问题,只拿了10分,我的答案比正确答案少了一些,但是根据我们的推论因该是没有问题的,知道的大佬可以指导指导,谢谢!!出问题是事实,那我们只能换一个方式,我们的数组设定还是同上。那看看转移方程能怎么该。
其实认真思考能够得出f[n][0]的,这是可以手动计算的,那不如把它当作初值,之后就不用考虑j=0的情况了。那么我们继续想想转移方程,还是可以分为两个部分,同上。那么我们就可以把代码改成这样子:

for(int i = 1; i <= n; i++)f[i][0] = f[i - 1][0] - a[i];//手动计算出一步不走的情况
f[0][0] = 0;//初值给上
for(int i = 1; i <= n; i++)for(int j = 1; j <= i; j++){f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i]);//根据走或不走两种可能写下转移if(j % T == 0) f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i] + b[i]);//如果累计次数达到了T的倍数,就相当于走了T次,那么再加一个b[i]}

最后再把读入和输出加进去,就大功告成了!(因为上面已经讲的很详细了,所以完整代码就不添注释了)

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 5010;
int n, T, a[N], b[N], f[N][N];int main(){cin >> n >> T;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++) cin >> b[i];for(int i = 1; i <= n; i++)f[i][0] = f[i - 1][0] - a[i];f[0][0] = 0;for(int i = 1; i <= n; i++)for(int j = 1; j <= i; j++){f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i]);if(j % T == 0) f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i] + b[i]);}int maxn = 0;for(int i = 1; i <= n; i++) maxn = max(maxn, f[n][i]);cout << maxn << "\n";return 0;
}

2025.3.8

今天是三八妇女节(也是女神节),祝屏幕前的女神们节日快乐男生就算了!!今天完成了昨天老师布置的作业,最后一道题卡住了,可能是思路错了吧。。。前两题都很有难度呢,但还好,不至于一点思路没有,为了防止我脑袋突然闪电而想出的正解,所以我认为需要整理一下,我找个时间写一下吧,现在就算了,马上又要上课了,我还是再准备一下吧。
在学校,脑袋都要坏掉了,一周考了6次试,而且只算了数学,语文也考了3次试,我真的,现在脑袋都还是昏的。看标题才发现,哦~~原来才三月啊,流泪ing,才第三周!!!!!!!!!!!!六年级下册是要把我们放进炼丹炉里炼了是吧。
不吐槽了,去上课了。
上课回来了,家人们我复活了,又觉得我行了,今天晚上又ABC,我待会要去打一下,简单总结一下今天上课的知识吧:
今天学习的是单源最短路(进阶),还是很有难度的,毕竟还是进阶,但是我发现其实这些题里,最难的不是代码,而是思路,老师不讲思路那些代码是一点不会打,有些题连建图都难,但老师一说思路,这题就已经进入我的“猎杀范围”了。当出现这种情况,就因该好好再整理一下思路,像这些不是靠自己想出来的题,你不总结,下一次照样的不会。总结就明天吧,先休息一下,待会再打一个atcoder不就完美了吗?

2025.3.9

新的一天到来了呢,今天早上上完课后就去买了一双鞋,非常的好看,但是真的不敢穿去学校,一让同学看到就得被踩得乌漆嘛黑的,真不知道是谁创造出了踩新鞋有好运
昨晚的atcoder只A了前三题,第四题是我想复杂了,看那个数据范围和题目,就感觉像是图论+状压dp,但我唯独就是忽略了n的大小只有10!!只要我们抓住这一点就可以用类似全排列的dfs求出各个的可能性,最后进行更新答案就好了,第五题目前属于放弃状态,B站上也没有一个讲的清楚的,要么就是讲的多复杂,要么就是。。。(想不出来形容词了,自行脑部),看来只能求助老师了。
OK,今天我们就来总结一下昨天的上课内容吧。只总结一道例题和一道作业题:
1.先来说一下例题吧,随机幸运儿到三号例题!!【zhe'shi'ti'mu
新的一月到来啦!今天干了个啥呢?好像没干啥也是把昨天编程学习的作业做了,待会又要去学S组的知识了,我先去刷题了。。。
OK啊,也是把课学完了,待会我又要去打atcoder了,今天学的是差分约束,其实就是图上的知识,主要的表达形式是:u <= v + w或者u >= v + w或者......他的考点特别灵活,也是偏数学知识,对我的数学也是有着肥肠大的帮助(他也可以这样考:小a只记得区间u~v的白菜数最多有/最少有/只有w个,分别可以转换成v - u <= w / v - u >= w / v - u == w,再把这里的v移到w那边基本上就会的到一个最长路/最短路的算式,之后再拿bellman或者各种单元最短路来求得答案即可)。
打完atcoder了,这次也是有了很大的突破,终于自己把第五题AC了!简单的总结一下atcoder第五题的知识点吧。。。题目传送门

思路

一眼图论题好像说了句废话,表达方式跟单源最短路不能再像了,但有一点不一样,那就是可以花费x点的代价让所有的边转换方向(因为题目给的边都是单向的嘛)。然后我就很智慧的直接建了个边权为x+1的反边,就高兴地拿到了0分。。。为什么没AC?我们来考虑一种情况,如果题目给出了一条边为u-->v,我们建了一条边为u到v边权为1的边,又建了一条边为v到u边权为x+1的边,然后题目有给出了一条变为v-->u,计算机:。。。我:不是你怎么还不算,说!计算机:。。。
那么该怎么才能正确的解决这个呢?其实就是建新边。那该怎么建新边呢?当然是多开n个空间,然后在多开的那n个空间中建反边,除了出现重边的情况,不然不会出现上述情况。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long//记得开long long
const int N = 2e5 + 10;
struct Node{//邻接表存图int x, w;
};
struct pq{//Dijkstra专用优先队列结构体int x, dis;bool operator<(const pq& a) const{//重载运算符return dis > a.dis;}
};
vector <Node> mp[2 * N];//考虑到反边,所以把数组开成两倍大小
int n, m, x, dis[2 * N];//dis数组一样
void Dijkstra(int st){//Dijkstra模板priority_queue <pq> q;//Dijkstra得用优先队列memset(dis, 0x3f, sizeof dis);dis[st] = 0;q.push({st, 0});while(!q.empty()){pq t = q.top(); q.pop();if(dis[t.x] != t.dis) continue;//优化,因为是优先队列顺序是不固定的,所以判断该点是否已经展开加修改了for(auto nxt : mp[t.x]){int y = nxt.x, w = nxt.w;if(dis[t.x] + w < dis[y]){//最短路dis[y] = dis[t.x] + w;q.push({y, dis[y]});}}}
}signed main(){cin >> n >> m >> x;while(m --){int u, v; cin >> u >> v;mp[u].push_back({v, 1});//建边mp[v + n].push_back({u + n, 1});//这是反边,也就是如果要花费x个代价后能这样走}for(int i = 1; i <= n; i++){//建立一个能把两个相同的点连接的边,边权为x,也就是建立一个能够转换边缘的边mp[i].push_back({i + n, x});mp[i + n].push_back({i, x});}Dijkstra(1);//模板cout << min(dis[n], dis[2 * n]) << "\n";//判断是在转换后的点n代价更少还是没有转换的点n代价更少return 0;
}

2025.3.2

今天一大早就起来去上课了,学的是数学,应为我天生的聪敏材质提前一节课完成了课中的任务。。。导致后面我无聊到开始做作业(真是六了,传奇),好心的老师看我太无聊就给了我一套卷子,我一看:“哦~~原来就是期末测验题啊。”,再看:“???什么玩意,期末测试题,今天不是第二节课吗?怎么期末了??!!!"我的表情:六,盐都不盐了。
中午一点半左右回到了温暖的家,看了亿会电视就开始下午的联系了,先花了亿点时间完成学校作业,又改了一下小明月赛的题(但是只改了div3的,div2的一个不会改,一个不知道错哪了,一个完全没思路,主要还是它没标程),洛谷又做了一道题,虽然是黄题,但是花了我不少时间,是一道dp,也不知道具体是什么dp,因该属于二维dp,这是题目。我就简单的整理一下吧。

思路

我一开始是这样做的,设f[i][j]为在前i个箭头中,走了j步能够获得的最大价值,那么转移方程就好弄了,主要分为两个部分,第一:我不走这个箭头。第二:我要走这个箭头。那两个部分我们依次完成。

如果我不走这个箭头

那么我的步数肯定不会大于等于i(因为我不可能在一秒钟走两秒,它本身是矛盾的),然后一定是根据前i-1推来的,所以代码如下:

for(int i = 1; i <= n; i++)for(int j = 0; j < i; j++) f[i][j] = f[i - 1][j] - a[i];
如果我不走这个箭头

那么我的步数肯定不会大于i(原因同上,能等于也是因为我走了)小于1(因为我至少走了一步),而因为当前我要走这个箭头,所以状态是根据前i-1个箭头走了j-1次推来的,还要注意走的步数是T的倍数这个问题,要加b[i]。代码如下:

for(int i = 1; i <= n; i++)for(int j = 1; j <= i; j++)if(f[i - 1][j - 1] + a[i] > f[i][j]){f[i][j] = f[i - 1][j - 1] + a[i];if(j % T == 0) f[i][j] += b[i];}

最终把他们融合在一起即可,但是出了一些小问题,只拿了10分,我的答案比正确答案少了一些,但是根据我们的推论因该是没有问题的,知道的大佬可以指导指导,谢谢!!出问题是事实,那我们只能换一个方式,我们的数组设定还是同上。那看看转移方程能怎么该。
其实认真思考能够得出f[n][0]的,这是可以手动计算的,那不如把它当作初值,之后就不用考虑j=0的情况了。那么我们继续想想转移方程,还是可以分为两个部分,同上。那么我们就可以把代码改成这样子:

for(int i = 1; i <= n; i++)f[i][0] = f[i - 1][0] - a[i];//手动计算出一步不走的情况
f[0][0] = 0;//初值给上
for(int i = 1; i <= n; i++)for(int j = 1; j <= i; j++){f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i]);//根据走或不走两种可能写下转移if(j % T == 0) f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i] + b[i]);//如果累计次数达到了T的倍数,就相当于走了T次,那么再加一个b[i]}

最后再把读入和输出加进去,就大功告成了!(因为上面已经讲的很详细了,所以完整代码就不添注释了)

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 5010;
int n, T, a[N], b[N], f[N][N];int main(){cin >> n >> T;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++) cin >> b[i];for(int i = 1; i <= n; i++)f[i][0] = f[i - 1][0] - a[i];f[0][0] = 0;for(int i = 1; i <= n; i++)for(int j = 1; j <= i; j++){f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i]);if(j % T == 0) f[i][j] = max(f[i - 1][j] - a[i], f[i - 1][j - 1] + a[i] + b[i]);}int maxn = 0;for(int i = 1; i <= n; i++) maxn = max(maxn, f[n][i]);cout << maxn << "\n";return 0;
}

2025.3.8

今天是三八妇女节(也是女神节),祝屏幕前的女神们节日快乐男生就算了!!今天完成了昨天老师布置的作业,最后一道题卡住了,可能是思路错了吧。。。前两题都很有难度呢,但还好,不至于一点思路没有,为了防止我脑袋突然闪电而想出的正解,所以我认为需要整理一下,我找个时间写一下吧,现在就算了,马上又要上课了,我还是再准备一下吧。
在学校,脑袋都要坏掉了,一周考了6次试,而且只算了数学,语文也考了3次试,我真的,现在脑袋都还是昏的。看标题才发现,哦~~原来才三月啊,流泪ing,才第三周!!!!!!!!!!!!六年级下册是要把我们放进炼丹炉里炼了是吧。
不吐槽了,去上课了。
上课回来了,家人们我复活了,又觉得我行了,今天晚上又ABC,我待会要去打一下,简单总结一下今天上课的知识吧:
今天学习的是单源最短路(进阶),还是很有难度的,毕竟还是进阶,但是我发现其实这些题里,最难的不是代码,而是思路,老师不讲思路那些代码是一点不会打,有些题连建图都难,但老师一说思路,这题就已经进入我的“猎杀范围”了。当出现这种情况,就因该好好再整理一下思路,像这些不是靠自己想出来的题,你不总结,下一次照样的不会。总结就明天吧,先休息一下,待会再打一个atcoder不就完美了吗?

2025.3.9

新的一天到来了呢,今天早上上完课后就去买了一双鞋,非常的好看,但是真的不敢穿去学校,一让同学看到就得被踩得乌漆嘛黑的,真不知道是谁创造出了踩新鞋有好运
昨晚的atcoder只A了前三题,第四题是我想复杂了,看那个数据范围和题目,就感觉像是图论+状压dp,但我唯独就是忽略了n的大小只有10!!只要我们抓住这一点就可以用类似全排列的dfs求出各个的可能性,最后进行更新答案就好了,第五题目前属于放弃状态,B站上也没有一个讲的清楚的,要么就是讲的多复杂,要么就是。。。(想不出来形容词了,自行脑部),看来只能求助老师了。
OK,今天我们就来总结一下昨天的上课内容吧。只总结一道例题:
1.先来说一下例题吧,随机幸运儿到三号例题!!题目
先说思路,明显是一道单源最短路,这道题就只有一个难点,就是他的路径费用有些不一样(只有一个难点,但这道难点有点关键)那我们来看看该怎么处理这个费用问题:
先来看看我们该用什么算法,算法的条件(也就是更新条件)该怎么写?首先选择算法,个人推荐使用SPFA。因为如果使用Dijkstra,首先是无法保证一个点更新后就是最优答案,其次即使使用SPFA时间复杂度也不会爆。那该怎么写更新条件呢?我们来看一下这幅图。图片
我们很容易就能列出一下式子:max(p[u] - w1, p[u] - w2)。我们发现都要被减去一个p[u],那不如我们把它们变成这样:min(w1, w2) - p[u]。这样就能发现,其实就是求最小边权和,最后再求一个减去当前节点的花费的最大值即可,但需要注意的是dis[1]我们需要给他初始化成p[1],因为p[1]是开始的边,是没有人能给他产生贡献的,所以我们得先保证它的值大于p[1]。然后初始化每个dis为最大值。然后再判断min(dis[x], p[y]) < dis[y]即可。
OK,思路讲清楚了,接下来是代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
vector <int> mp1[N], mp2[N];//要建个反图,然后判断这个点是否能到达
bool flag[N];//当前这个点能否到达
int p[N], n, m, dis[N];
queue <int> q;
void dfs(int x){flag[x] = 1;for(int y : mp2[x]) if(!flag[y]) dfs(y);
}//枚举能够到达的点
void SPFA(int st){q.push(st);memset(dis, 0x3f, sizeof dis);dis[st] = p[st];while(!q.empty()){int x = q.front(); q.pop();for(int y : mp1[x])if(min(dis[x], p[y]) < dis[y]){dis[y] = min(dis[x], p[y]);q.push(y);}}
}int main(){cin >> n >> m;for(int i = 1; i <= n; i++) cin >> p[i];while(m --){int u, v, op; cin >> u >> v >> op;mp1[u].push_back(v);mp2[v].push_back(u);if(op == 2){mp1[v].push_back(u);mp2[u].push_back(v);}//按照题目意思建图}dfs(n);//枚举能够到达n的点,防止出现不能到达n的点是最大收获的情况SPFA(1);//单源最短路int maxn = 0;for(int i = 1; i <= n; i++) if(flag[i]) maxn = max(maxn, p[i] - dis[i]);//计算答案cout << maxn << "\n";return 0;//完结撒花
}

2025.3.13

啊,终于可以在学校集训了。主要是最近不是举行了嘉祥杯吗?老师都让我们去练题嘛,但说实话,老师一共让我们练了5道题,都是普及-的内容吧,太简单了,好像都没有算法在里面。。。所以我就去看了一下洛谷,结果发现了一道特别有趣的题,然后精力全花上面了,两天时间把他给熬出来了,我也写了一个题解详情请点这(这就是我在学校的全部了。。)

2025.3.23

距离上一次写曰记已经过去了10天了,这一期间发生了很多的事情呢,我们一件一件的来总结。

  1. 嘉祥杯在下周就要开始了,老师发的那个练题也太简单了,跟着下周嘉祥杯比赛的还有一个比赛,就是四川算法大赛,还不清楚那个比赛具体是什么,只知道和CSP差不多。
  2. 上周编程课J组学的是优先队列,我掌握的还不错,主要是在S组的Dijkstra算法里了解过一些,S组学的是分层图,我才知道上上上。。。上周的atcoder第五题就是分层图(偏模版),这样一下发现也没什难得,分层图可以有多种实现方式,比如可以把图给分层,这就是分层图的主要做法,而有个更简单的做法就是建图好好建,在跑最短路/长路时,把dis数组升维即可。这样更好实现些而已。
  3. 这周的编程课都是阶段测试,周五J组的考了310分,老师说第3题很难,所以我就没看,但其实后面总结的时候发现还是很简单的。时间主要浪费在了第5题,我其实老早就已经写出了正解了,结果在我有一次统一改变量名时,有一个地方没改完,导致丢分惨重!!!!已老实,求放过!这次J组的题里有3道题都是数学,我还是较为轻松的拿捏了,有一个就是贪心(就是拿到老师认为的巨难的题),有一个就是对顶堆(就是我变量名写错了的那道题),难度不大,就是时间少了些。。。S组的直接就是AK了,我都不敢相信,我J组的考这样我S组的还AK了,其实仔细一想题也不难,前两题大家都能轻松驾驭吧,都是水题,最难得我觉得差不多就是第四题第三题的样子,第五题还要简单些,第五题就相当于告诉你很复杂的边信息,让你间接的求出边权而已,只要思路清晰,也能一遍切(他就是一个分层图,但本蒟蒻太菜了,还是用的是最短路时的升维)。第三题和第四题其实也不是很难,一个就是负环+差分约束,一个就是偏模版的最短路,也可以随便切。综合评价:代码实现难度最高的是第五题,思路最难的是第四题。
  4. 其实S组的阶段测试是我后面才来补的,大家都在做的时候我在考GESP6级,这次有机会跳个级,答案已经出来了,两道编程题也是有惊无险的AK了,第一题其实就是二叉树的结构思想,只要你会打草稿(已经超越了99.9%的用户开玩笑),就可以AC。第二题是一道较为简单的一维DP,考到了正难则反的思想,但也不完全反,还是会有些正的。其实就是判断两种情况,这两种情况中有一些情况出现了不连续,那我们就可以吧减去的数值看成连续的,这样就简单多了。
    这就是这几天的事了,时间过得好快啊,转眼间就要小学毕业了呢。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/903739.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux版本的MAT(Eclipse Memory Analyzer)内存分析工具使用

首先先下载对应平台的工具 官方地址:https://eclipse.dev/mat/download/ 因为我是arm的架构 所以下载的是arm64的安装包 下载完成后解压 得到以下内容 先修改初始化的启动的内存大小 vim MemoryAnalyzer.ini 主要修改这个值 这个要尽量大点 不然我们的内存分析文件很大 会执行…

【CodeForces训练记录】Codeforces Round 1011 (Div. 2)

训练情况赛后反思 B题因为分讨的问题WA了一发,异或还是不大会做 A题 猜猜题,显然对于字符串全部都是一个字母的,无论怎么换字典序都不可能更小,对于其他情况因为可以选择两个字母互换,我们容易观察到对于某一个字符串一定存在一种换法能让字典序更小(无非就是换头或者换尾…

集美大学课程实验报告-实验3:栈、队列与递归

集美大学课程实验报告-实验3:栈、队列与递归项目名称 内容课程名称 数据结构班级 网安2413指导教师 郑如滨学生姓名 林沁茹学号 202421336067实验项目名称 实验3:栈、队列与递归上机实践日期上机实践时间 2学时一、目的(本次实验所涉及并要求掌握的知识点) 以下内容请根据实…

2025-03-22 闲话

2025-03-22 闲话有些闲话是纪实的,它们可能只是平淡的文字。它们可能没有感受,不带思考。你看不到装饰,只有琐碎、补也补不到自圆其说的细节。柴米油盐大抵是这样的。 来北京独居后的生活着实安逸。每天执行一个蛮正常的作息,保证三顿饮食、偶尔晚上和网友去搓搓夜宵。睡觉…

3.22 三重积分计算方法

三重积分的实际意义:计算一个立体的质量(可以) 1 投影法(先一后二)(一个土豆切成土豆丝,最后再累加Dxy平面) 一个立体图形可以看成是两个曲面拼接而成,z=(x,y)可表示一个曲面假设x和y都是确定的,然后就累加z,最后再算面积分 先假设有一条竖线,注意竖线是从哪里进入…

15.数组

数组C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。 数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组中的特定元素可以通过索引访问,第一个索引值为 0。声明数组在 C 中要声明一个数组,需要指定元素的类型和元素的数量 下…

逆向中简单的shellcode

做题时遇到了,简单记录一下 一,介绍: shellcode分为广义和狭义,狭义指的仅仅是通过命令行shell攻击靶机,并取得控制权的代码,广义的指能完成类似任务的代码,通常是汇编/机器码。 不过这里是RE,不是PWN,所以不会有靶机,那么在下文指的是广义的shellcode,注入程序,控…

linux一些好用命令:w,fuer,getfacl,usermod,chmod

一.命令 w w 是显示用户登录时间、空闲时间、当前执行的命令等。 2.示例 pst/* : 这是ssh登录 tty: 这是直接本地登录(ctrl+alt +F* 都可以) 这个是没本地登录显示的进程 二. 命令 fuser fuser 是一个可以查看使用此文件的进程号。 1.一般使用 fuser -a /path/to/filename…

Aligning the Objective of LLM-based Program Repair 论文笔记

介绍 (1) 发表 2025-02 ICSE24 (2) 挑战当前方法的推理目标与 LLM 的训练目标没有对齐。现有 LLM-based 方法通常采用 MLM 的方式预测修复代码(然而尽管模型参数被增大百倍但修复结果甚至没有翻一番,这与其他任务的明确可伸缩性形成对比)。因此本文假设在训练中 <masked,…

监狱智能视频分析告警系统解决方案

监狱智能视频分析告警系统解决方案能够精准监测到静坐不动、离床、攀高、独处等行为。例如,当一名囚犯长时间静坐不动时,监狱智能视频分析告警系统解决方案会自动识别并发出预警,以便管理人员及时了解情况,防止囚犯出现自伤、自残等危险行为。在洗手间场景中,系统对入厕超…

昆明理工大学最新《现代材料测试技术》复试真题及答案

-材料测试 昆工材料物理与化学、材料学、材料表征与分析、材料工程、F001现代材料测试技术、864材料科学基础、昆明理工大学材料调剂

RTT 全志D1s跑tina linux

刚毕业那会抽奖抽了一块RTT的D1S开发板,看了一下打印log就放下吃灰了。跑RT-thread的感觉折腾起来太麻烦了就让他吃灰了。最近手头有一块屏幕和一个2欧的小喇叭打算驱动一下。 正好这块板子也出来好多年了。玩一玩。首先我找到了百问网的哪吒开发板他也是D1S的,直接把他的SDK…