- 博客(7)
- 收藏
- 关注
原创 寒假第七次作业
使用dfs和dp,注意结点标号在 00 到 n−1 之间,如果一个节点不安排士兵,那么它的所有子节点都必须安排士兵;如果一个节点安排了士兵,那么它的子节点可以安排也可以不安排士兵。用floyd计算图中任意两点之间的最短路径,然后遍历每个节点,找出从该节点出发到其他所有节点的最短路径中的最大值。先dfs找到一个最远的点,在从这个点找到最长的就是直径。一、Stockbroker Grapevine。分为三种情况,选左边,选右边,和选两边;三、Invitation Cards。
2025-02-19 20:16:07
359
原创 寒假第六次作业
一个说谎者旁边两个一定是诚实的,就说明第i个人如果比i-2个人的数字大1,那么中间那个是说谎者。dp[][0]代表这个人是诚实的话有几种配置,dp[][1]代表说谎。如果加入了下一个值,大于了下一个值,记录,与以前 的最大值对比。这是一个多重背包,在01背包的基础上加一个二进制优化。所以看作一个单调的上升序列的最长公共子序列。因为这是一个无重复单调数组的两个排序。这题就是一个01背包。
2025-02-16 18:04:51
208
原创 寒假第五次作业
找到了一个好方法,dfs时用一个queue先灌满白色的pair<int, int>,再取出第一个将它临近的标记为1(+1),把它弹出,把刚刚的加入队尾,等白的处理完了,就到刚刚标为1的,将他们延申一格,标为2(1+1);这个方便,从边缘开始找,将临近的全部变成1,再用另一个数组输出,如果第一个数组的位置为1,输出原本数组上的,如果不为1,输出2;一开始将输出部分单独写了一个函数,一直time error,怎么调都没调好,差点列举了;总的来说就是,用3个数组存储已占有的行和两个对角线,然后递归和回溯;
2025-02-13 19:20:39
422
原创 寒假第四次作业
一个个找公倍数较难,从下往上统计每个数的倍数,找到最多的那个,就包含了最多 的元素,就是最长的子序列。用埃氏筛筛出1到50000的质数,在标记这些质数在[l,r]中的倍数,统计没标记的。一个自然数和下一个自然数一定时互质的,所以大部分情况为r-l。在读取时将a和b取余,再用扩展欧几里得计算出满足。找两个相乘为a/b的数,看他们是否互质。二、Minimal Coprime。但1,1时也是有1个,所以单独讨论。然后还是找大佬的代码仔细研读得了。四、最大公约数和最小公倍数问题。
2025-02-10 22:48:49
172
原创 寒假第三次作业
使用st表,找到一定距离内,一个人最多跑到哪(下一个人的起点),再检测是否符合自己的奔袭区间。使用小根堆,先添加所有数据,在每次删除两个最小的,添加这两者的和,重复n-1次。使用栈,找到阶段性最高点,再让入栈元素一个个出栈。直接用priority queue实现。可以观察到,输入元素的起始点是递增的。一、Priority Queue。
2025-02-07 15:41:28
209
原创 寒假第二次作业
二分法找一个最大值,check方法使得∑(高/值)*(宽/值)大于小朋友的人数。核心思想是所有长度为跳跃能力的子区间都要大于2x(作为check,使用二分法)先找到每张牌的上限,再找出最大的上线作为二分法的right;(Java代码不知道存哪去了TT,重新写了一个c++的TT)2、输出:找到人与人之间的节点,从后往前安排任务。遍历查找A-C在数组中有几个A-C。最后用二分法找一个能被填平的最大值。1、找节点:二分法找到时间T。用hashmap实现。下面是我拙劣的二分法。
2025-01-26 16:51:41
321
原创 寒假第一次作业
观察可知,每一个元素所在的行与列是不变的,所以不需要将数组中的元素进行调换,用一个二维数组作为读取的目录,找到原数组与交换后的关系,按目录顺序读取,输出交换后的二维数组。先同步大小写如果用c,遍历string,全部转化为大写,与YES对比,如果是输出YES,不是输出NO。所以使用类似于密码的解码与源码的转换在26个字母的key上进行操作,得到对照表,可以节约空间。先判断每一行的K是否过半,再判断可行的行数是否过半,两次计数,两次判断。先input一个数N,判断N次,为了节约算力,使用最后一位判断。
2025-01-23 10:20:10
198
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅