简单记录一下Makefile和CMake的用法

力扣2045-到达目的地第二短时间

2045. 到达目的地的第二短时间

题目描述

城市用一个 双向连通 图表示,图中有 n 个节点,从 1 到 n 编号(包含 1 和 n)。图中的边用一个二维整数数组 edges 表示,其中每个 edges[i] = [ui, vi] 表示一条节点 ui 和节点 vi 之间的双向连通边。每组节点对由 最多一条 边连通,顶点不存在连接到自身的边。穿过任意一条边的时间是 time 分钟。

每个节点都有一个交通信号灯,每 change 分钟改变一次,从绿色变成红色,再由红色变成绿色,循环往复。所有信号灯都 同时 改变。你可以在 任何时候 进入某个节点,但是 只能 在节点 信号灯是绿色时 才能离开。如果信号灯是 绿色 ,你 不能 在节点等待,必须离开。

第二小的值 是 严格大于 最小值的所有值中最小的值。

例如,[2, 3, 4] 中第二小的值是 3 ,而 [2, 2, 4] 中第二小的值是 4 。
给你 n、edges、time 和 change ,返回从节点 1 到节点 n 需要的 第二短时间 。

注意:

你可以 任意次 穿过任意顶点,包括 1 和 n 。
你可以假设在 启程时 ,所有信号灯刚刚变成 绿色 。

示例 1:

💡 阅读更多

对copy-constructor的一点理解

Memberwise Initialization

在默认情况下,当以某个class object作为另一个object的初值时,会发生成员逐一初始化,

1
2
Example E1(8);
Example E2 = E1;

class data member会被依次复制,即对象中的每个成员都会被复制到另一个对象的相应成员上。

对于这种情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Matrix {
public:
Matrix(int row, int col) : _row(row), _col(col)
{
_pmat = new double[row * col];
}
~Matrix()
{
delete [] _pmat;
}
private:
int _row, _col;
double *_pmat;
};


// in this case

Matrix mat(4, 4);
//此处constructor发生作用
{
Matrix mat2 = mat;
// 此处进行了default memberwise initialization
// ...
// 此处,mat2的destructor发生作用。
}

根据默认的成员逐一初始化,mat2._pmat = mat._pmat,所以这两个指针指向了同一个堆内存空间内的数组,当mat2的析构函数发生作用时,该内存空间便被释放,但是mat的指针还是指同一空间,此时再使用这个指针就会产生严重错误。

💡 阅读更多

很久之前做的一些PTA上的题目

2021年年初的时候学习算法时做的一些PTA上的题,一直放在电脑里不舍得删但看着麻烦也怕丢失就放到了github的仓库里。

https://github.com/yydrowz3/somePTAProblemsCode

具体的题号没有写明,文件的名字是由题目的标题变化而来,如果真的想找到原题的话可以用对应的文件名搜一下题。

由于实在是间隔甚远再加上当时偷懒没做好标记,无力单独分开汇总。或许哪天有空了再说。

都是能AC的代码,也不求能帮到别人,只是想记录一下当时敲过的这些东西。

💡 阅读更多

在学C++Primer做的一些笔记

大概是一个月前,实在是闲的没事,在图书馆想找点C++的书学习学习这个我一直没深入的语言。本来是奔着Essential C++去的,结果找了一圈只有英文版的而且还是旧版,想想就还是算了吧,这种技术肯定是要看新标准的更好。最后只找到了这本C++ Primer,虽然我内心对这种大部头的书比较抗拒,但是要想学好一门技术,这种权威的书籍是最好的。

看看这包浆的封面和书页,这块大砖也肯定帮到过不少人吧。

💡 阅读更多

洛谷P1414 又是毕业季II

洛谷P1414 又是毕业季II

题目背景

“叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻。毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌。1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定是一生最难忘的时刻!

题目描述

彩排了一次,老师不太满意。当然啦,取每位同学的号数来找最大公约数显然不太合理。于是老师给每位同学评了一个能力值。于是现在问题变为,从n个学生中挑出k个人使得他们的默契程度(即能力值的最大公约数)最大。但因为节目太多了,而且每个节目需要的人数又不知道。老师想要知道所有情况下能达到的最大默契程度是多少。这下子更麻烦了,还是交给你吧~

PS:一个数的最大公约数即本身。

输入格式

第一行一个正整数n。

第二行为n个空格隔开的正整数,表示每个学生的能力值。

输出格式

总共n行,第i行为k=i情况下的最大默契程度。

💡 阅读更多

洛谷P1069 细胞分裂

洛谷 P1069 [NOIP2009 普及组] 细胞分裂

题目描述

HanksHanks 博士是 BTB**T (Bio-TechBioTec**h,生物技术) 领域的知名专家。现在,他正在为一个细胞实验做准备工作:培养细胞样本。

HanksHanks 博士手里现在有 NN种细胞,编号从 1-N1−N,一个第 ii种细胞经过 11 秒钟可以分裂为S_iS**i个同种细胞(S_iS**i为正整数)。现在他需要选取某种细胞的一个放进培养皿,让其自由分裂,进行培养。一段时间以后,再把培养皿中的所有细胞平均分入MM个试管,形成MM份样本,用于实验。HanksHanks 博士的试管数MM很大,普通的计算机的基本数据类型无法存储这样大的MM值,但万幸的是,MM 总可以表示为m_1m1的m_2m2次方,即M = m_1^{m_2}M=m1m2,其中 m_1,m_2m1,m2均为基本数据类型可以存储的正整数。

注意,整个实验过程中不允许分割单个细胞,比如某个时刻若培养皿中有 44个细胞,

HanksHanks博士可以把它们分入 22 个试管,每试管内22 个,然后开始实验。但如果培养皿中有55个细胞,博士就无法将它们均分入22 个试管。此时,博士就只能等待一段时间,让细胞们继续分裂,使得其个数可以均分,或是干脆改换另一种细胞培养。

为了能让实验尽早开始,HanksHanks博士在选定一种细胞开始培养后,总是在得到的细胞“刚好可以平均分入 MM个试管”时停止细胞培养并开始实验。现在博士希望知道,选择哪种细胞培养,可以使得实验的开始时间最早。

输入格式

第一行,有一个正整数 NN,代表细胞种数。

第二行,有两个正整数 m_1,m_2m1,m2,以一个空格隔开,即表示试管的总数 M = m_1^{m_2}M=m1m2.

第三行有 N 个正整数,第 i 个数 Si表示第 i 种细胞经过 1 秒钟可以分裂成同种细胞的个数。

输出格式

一个整数,表示从开始培养细胞到实验能够开始所经过的最少时间(单位为秒)。

如果无论HanksHanks博士选择哪种细胞都不能满足要求,则输出整数-1−1。

输入输出样例

输入 #1复制

1
2
3
1 
2 1
3

输出 #1复制

1
-1

输入 #2复制

1
2
3
2
24 1
30 12

输出 #2复制

1
2

说明/提示

【输入输出说明】

经过 11秒钟,细胞分裂成33 个,经过22秒钟,细胞分裂成99个,……,可以看出无论怎么分裂,细胞的个数都是奇数,因此永远不能分入 22个试管。

【输入输出样例22说明】

第 11 种细胞最早在33 秒后才能均分入2424 个试管,而第22 种最早在22 秒后就可以均分(每试管144/(241)=6144/(241)=6 个)。故实验最早可以在22 秒后开始。

【数据范围】

对于 50%的数据,有m_1^{m_2} ≤ 30000m1m2≤30000。

对于所有的数据,有1 ≤N≤ 10000,1 ≤m_1 ≤ 30000,1 ≤m_2 ≤ 10000,1 ≤ S_i ≤ 2,000,000,0001≤N≤10000,1≤m1≤30000,1≤m2≤10000,1≤S**i≤2,000,000,000。

NOIP 2009 普及组 第三题

💡 阅读更多

Qt八数码问题,人工智能课的任务罢了

用Qt做的八数码问题,人工智能课的作业罢了

学习了A*搜索,启发式搜索效率比之前学的盲目搜索高多了。但是怎么构造启发函数还是很难的,需要一点数学基础,当然也要脑子好。

这次的启发式函数f(x) = g(x) + h(x) ,其中g(x)是当前搜索的深度,这就像是dijkstra了,总是能保证在当前深度上是最优的。h(x)是用曼哈顿距离表示当前状态与目标状态的位置坐标差的和,因此这部分就可以让搜索的过程有预测,可以用贪心的方式进行选择。达到目标状态时,g(x)为深度而h(x)为0,因此通过前一部分可以保证此时是最优解。

💡 阅读更多

洛谷P2404 自然数的拆分问题

洛谷 P2404 自然数的拆分问题

题目描述

任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。

输入格式

输入:待拆分的自然数n。

输出格式

输出:若干数的加法式子。

输入输出样例

输入 #1

1
7

输出 #1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4

说明/提示

用回溯做。。。。

n\le 8n≤8

💡 阅读更多

洛谷P1160 队列安排

洛谷 P1160 队列安排

题目描述

一个学校里老师要将班上NN个同学排成一列,同学被编号为1\sim N1∼N,他采取如下的方法:

  1. 先将11号同学安排进队列,这时队列中只有他一个人;
  2. 2-N2−N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1\sim (i -1)1∼(i−1)中某位同学(即之前已经入列的同学)的左边或右边;
  3. 从队列中去掉M(M<N)M(M<N)个同学,其他同学位置顺序不变。

在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。

输入格式

第11行为一个正整数NN,表示了有NN个同学。

第2-N2−N行,第ii行包含两个整数k,pk,p,其中kk为小于ii的正整数,pp为00或者11。若pp为00,则表示将ii号同学插入到kk号同学的左边,pp为11则表示插入到右边。

第N+1N+1行为一个正整数MM,表示去掉的同学数目。

接下来MM行,每行一个正整数xx,表示将xx号同学从队列中移去,如果xx号同学已经不在队列中则忽略这一条指令。

输出格式

11行,包含最多NN个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。

输入输出样例

输入 #1复制

1
2
3
4
5
6
7
4
1 0
2 1
1 0
2
3
3

输出 #1复制

1
2 4 1

说明/提示

样例解释:

将同学22插入至同学11左边,此时队列为:

2 121

将同学33插入至同学22右边,此时队列为:

2 3 1231

将同学44插入至同学11左边,此时队列为:

2 3 4 12341

将同学33从队列中移出,此时队列为:

2 4 1241

同学33已经不在队列中,忽略最后一条指令

最终队列:

2 4 1241

💡 阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×