11 2023 档案

摘要:struct Array{ int* p; int size; int capacity; }; Array *create_array(int value){ Array *array=new Array;//定义一个新指针时,一定要记得初始化 //要么用已经定义了的变量的地址,要么new一个 / 阅读全文
posted @ 2023-11-30 00:02 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:例题: #include <iostream> #include <stdio.h> #define ll long long using namespace std; int ans[100]; int main(){ double d; cin >> d; ll p=*(ll *)&d; int 阅读全文
posted @ 2023-11-29 22:36 最爱丁珰 阅读(10) 评论(0) 推荐(0) 编辑
摘要:1.如果在代码里面这么写 char *cp="123"; ... if(*cp) ... if(!*cp) ... 第一个if指cp这个指针当前指向的地址是否是cp最开始指向的字符串的有效位里面(不包含'\0') 第二个if当然就是反过来了 2.如果常量指针(const)要赋值给普通指针,必须加上显 阅读全文
posted @ 2023-11-29 22:17 最爱丁珰 阅读(9) 评论(0) 推荐(0) 编辑
摘要:首先将原区间分块(设块的大小是T) 先处理处每一个数字的vector,蒲公英那题的vector一样 然后处理出f[i][j]数组,表示第i个块到第j个块之间出现了偶数次数字的个数 具体见代码,这里主要讲一下时间复杂度 时间复杂度不是O(n2),实际上,应该是\(\s 阅读全文
posted @ 2023-11-26 18:10 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:先说下我最开始的思路 我设计的估价函数是这么想的,因为估价函数必须优于实际情况嘛,我就考虑每走一步会改变什么,不难发现会把一些新的点加入连通块,我就让每一步中本来不该加入连通块(因为颜色不同)但是相连的点加入连通块,相当于每一步都加入了更多的块,肯定会比实际操作更优 比如说这个图 第一步加入这些块 阅读全文
posted @ 2023-11-26 14:58 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:&x是x的地址,(int *)是把x的地址转换为int类型的指针,前面再加一个星号表示输出这个int指针的值。注意在内存中由于浮点数的储存形式,转换成int类型的指针的时候只取前四个字节,导致会输出一个很大的数 阅读全文
posted @ 2023-11-26 10:29 最爱丁珰 阅读(170) 评论(0) 推荐(0) 编辑
摘要:首先是估价函数的解释 由于x较大,所以x一直平方是最快的能到达p及以上的方法,所以这个估价函数比实际代价小(或等) 再看gcd这个剪枝 把八种情况列出,如果xy都是gcd=d的倍数,那么加减或翻倍之后的新的xy一定也是\(d 阅读全文
posted @ 2023-11-24 18:06 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:先简要解释一下从任何一个状态到目标状态的移动步数不可能小于所有数字当前位置与目标位置的曼哈顿距离之和 考虑一次移动,只能让一个数字的曼哈顿距离加一或者减一,而目标状态所有数字的曼哈顿距离都是0,所以得证 我们可以用普通的BFS做这道题目,由于边权是1,所以第一次搜索到的时候一定是最优情况 考虑用A* 阅读全文
posted @ 2023-11-23 16:53 最爱丁珰 阅读(12) 评论(0) 推荐(0) 编辑
摘要:首先证明那个比较显然的推论 我们先证明一下一个小引理:搜索树边权(也是后继的代价减去前驱的代价)非负的优先队列BFS先出队的点一定比后出队的点的代价小或等于 用数学归纳法,假设前面已经出队的点满足以上性质,之前最后一个出队的点为x,现在队列里面的队首是y,那我们就是要证明x阅读全文
posted @ 2023-11-23 16:41 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:A*算法,本质是对BFS的一种优化,无论这个BFS是普通的BFS(搜索树上边权为1)还是优先队列BFS(搜索树上的边权可能大于1) 蓝书上论证正确性那一段说的s指的是目标状态的某一状态(即s已经到达了目标状态但不一定最优)然后再去理解那一段话 但是,我想说的是,中间的点第一次被取出的 阅读全文
posted @ 2023-11-23 16:14 最爱丁珰 阅读(14) 评论(0) 推荐(0) 编辑
摘要:如果是C语言,那么在定义了一个结构体之后,在声明这个结构体变量的时候必须要在类型前加上struct 比如 struct Student{ //声明结构体 char name[20]; //姓名 int num; //学号 float score; //成绩 }; struct Student stu 阅读全文
posted @ 2023-11-23 09:41 最爱丁珰 阅读(84) 评论(0) 推荐(0) 编辑
摘要:enum Day { SUNDAY = -1, MONDAY = 3, TUESDAY, WEDNESDAY = 2, THURSDAY, FRIDAY, SATURDAY }; 这些类型的值分别是-1,3,4,2,3,4,5 所以从一个显性赋值的变量开始一直到下一个显性赋值的变量结束,中间的变量依 阅读全文
posted @ 2023-11-23 09:33 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑
摘要:如果保证了单调性,那么一个状态在出队的时候,一定是这个状态的最优情况 反证,如果不是最优情况,那么肯定存在一个状态A,A能到达这个状态且会让这个状态变优 由于这个状态变优了,要么就是箱子移动的步数少了,要么就是箱子移动的步数是一样的但人移动的步数少了 然后这个更优的状态是由A移动过来的,所以A状态中 阅读全文
posted @ 2023-11-22 16:17 最爱丁珰 阅读(8) 评论(0) 推荐(0) 编辑
摘要:如果要对二维字符数组一个一个位置赋初值,一定要像下面这么做 char s[5][5],s1[5][5]; for(int i=0;i<5;i++) for(int j=0;j<4;j++)//一定要注意j最多只能到3,因为最后一个位置要用来放停止符 { s[i][j]=j+(int)'0'; s[i 阅读全文
posted @ 2023-11-21 22:33 最爱丁珰 阅读(6) 评论(0) 推荐(0) 编辑
摘要:以下考虑完备匹配(非完备匹配要用到网络流) 给定一张二分图,其最大匹配方案不一定是唯一的。若边(x,y)至少属于一个最大匹配的方案,则称(x,y)为二分图匹配的可行边 以下证明假设我们已经求出了一个最大匹配 在完备匹配时,一条边(x,y)是可行边,当且仅当满足以下两个条件之一 阅读全文
posted @ 2023-11-21 19:28 最爱丁珰 阅读(32) 评论(0) 推荐(0) 编辑
摘要:![](https://img2023.cnblogs.com/blog/2490134/202311/2490134-20231121094910908-1544479116.png) ![](https://img2023.cnblogs.com/blog/2490134/202311/2490134-20231121095149757-619156730.png) 阅读全文
posted @ 2023-11-21 09:49 最爱丁珰 阅读(7) 评论(0) 推荐(0) 编辑
摘要:![](https://img2023.cnblogs.com/blog/2490134/202311/2490134-20231121094735108-365034293.png) 阅读全文
posted @ 2023-11-21 09:47 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:![](https://img2023.cnblogs.com/blog/2490134/202311/2490134-20231121094702412-423240584.jpg) 阅读全文
posted @ 2023-11-21 09:47 最爱丁珰 阅读(120) 评论(0) 推荐(0) 编辑
摘要:我的代码: #include<bits/stdc++.h> using namespace std; const int N=1000; int n; char s[N][N]; void work(int x) { if(x==1) { s[0][0]='*'; return; } work(x- 阅读全文
posted @ 2023-11-20 15:38 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:假设我们已经给每一个任务分配了一种模式了 那么相同模式的任务排在一起的时候肯定重启次数最小 对涉及到的模式,我们还原回二分图上 很显然的一点就是如果对某个任务,其ab0,那么肯定是放在对应的机器上做的,于是我们对应的机器的模式编号直接从1开始编号,那么一种模式就代 阅读全文
posted @ 2023-11-17 16:52 最爱丁珰 阅读(5) 评论(0) 推荐(0) 编辑
摘要:根据性质二,我们右部选出的被标记的点一定是匹配点 根据性质三,我们右部选出的点对应的左部的匹配点一定都被标记了,所以这些点不会被选择 根据性质一,我们左部选出的没被标记的点一定是匹配点 根据性质三,我们左部选出的点对应的右部的匹配点一定都没被标记,所以这些点不会被选择 所以我们选出的点集不会有任何的 阅读全文
posted @ 2023-11-17 16:41 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:![](https://img2023.cnblogs.com/blog/2490134/202311/2490134-20231116221722366-1620453470.png) 阅读全文
posted @ 2023-11-16 22:17 最爱丁珰 阅读(1) 评论(0) 推荐(0) 编辑
摘要:二分是怎么想到的? 我们假设已经找到了最终的方案,那么每一座防御塔都被分到了一些敌人去攻击 那么这个方案的时间是多少呢?就是每个防御塔的时间的最大值 每个防御塔的时间是他所分配的这些敌人里面所需要花费最长的时间去攻击的敌人的时间 相当于最大值最小,所以想到二分 蓝书上的做法固然正确,但是如果像我们上 阅读全文
posted @ 2023-11-16 22:02 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:1.拆点 首先对原图的任意一个匹配,显然可以在新图中找到对应的匹配(当然不止一种) 而新图的任意一个匹配,我们先将其进行标准化,具体来说,对原图中j拆成的若干个节点,他们在新图中的连边全部往前面放,并且按照左部节点的顺序大小排序(见下),根据鸽巢原理,肯定能找到原图 阅读全文
posted @ 2023-11-16 21:00 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:首先,用scanf对指针进行输入的时候,不要对指针加& 然后,对指针进行输入时,最好先把指针指向一个明确的地址,比如 #include<bits/stdc++.h> #define ll long long using namespace std; int main() { int p; int * 阅读全文
posted @ 2023-11-15 23:20 最爱丁珰 阅读(124) 评论(0) 推荐(0) 编辑
摘要:首先看蓝书上的代码 为什么即将开始dfs时,没有一开始就把vis[i]标记了? 其实dfs的流程是从左部的一个节点出发,考察右部的一个节点,如果右部的节点已经匹配了,下次dfs直接从这个右部节点的匹配点开始计算,所以vis的标记都是标记的右部节点,左部节点是不用标记的(因为是匹配二分图,只会 阅读全文
posted @ 2023-11-15 22:29 最爱丁珰 阅读(8) 评论(0) 推荐(0) 编辑
摘要:首先来看一看这个代码 这个代码输出的是2,即函数里面的c的值就是b的值,为主函数里面a这个变量的地址,所以a被改变了 再来看一看这个代码 这个代码输出的是1,就是b所指向的地址的内容没有被修改,所以c也是一个形参,他的值就是b的值(a的地址),但是c的值被改变了(变成了全局变量x的地址)不会导致b的 阅读全文
posted @ 2023-11-15 18:14 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:首先这道题很容易发现如果已经知道了最后的答案序列,那么操作顺序是无所谓的 所以我们可以假设从头操作到尾 由于题目给的是非严格递增序列,我们猜想最后的答案一定是一段一段的,段与段之间单调递增 比如1 1 1 2 2 2 2 2 3 3 4 5 5 反证:如果最终的答案序列存在ai和\(a 阅读全文
posted @ 2023-11-14 22:23 最爱丁珰 阅读(4) 评论(0) 推荐(0) 编辑
摘要:无论是.h还是.cpp,都可以写声明或者实体,而且.h和.cpp的前面的名字相同不相同没有任何的影响 最终一系列要连接的程序中,必须有且只有一个源文件有main函数,然后从这个main函数开始运行 include的作用其实是跟define一样的,是纯文本替换 进行替换之后,如果替换的内容是实体,那么 阅读全文
posted @ 2023-11-08 23:00 最爱丁珰 阅读(11) 评论(0) 推荐(0) 编辑
摘要:上面第二个参数为啥又有星号又有方框?这其实是一个指针数组,包含若干个指针,每个指针指向一维字符数组 另一篇文章:命令行 阅读全文
posted @ 2023-11-02 23:11 最爱丁珰 阅读(3) 评论(0) 推荐(0) 编辑
摘要:我们考查对任意一种方案答案的构成 假设最终方案只有这三段 那么很显然,答案为(S+sumT[i])sumCi+(2S+sumT[j])(sumCjsumCi)+(3S+sumT[n])(sumCnsumCj) 我们换 阅读全文
posted @ 2023-11-01 21:46 最爱丁珰 阅读(2) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示