摘要:
[笔记]线段树学习总结 概念 每个节点以结构体的方式存储,结构体包含以下几个信息: 区间左端点、右端点;(这两者必有) 这个区间要维护的信息(事实际情况而定,数目不等)。 图例: 性质 1、每个节点的左孩子区间范围为[l,mid],右孩子为[mid+1,r] 2、对于结点k,左孩子结点为2k,右孩子 阅读全文
摘要:
## 对拍程序(linux) 使用说明: 这里使用compare.cpp程序来对拍的,没有用bash脚本 使用时,先编译4个文件(std中放正确的标程/暴力程序 my中自己的程序 rand是用来产生数据的) g++ compare.cpp -o duipai g++ my.cpp -o my g++ 阅读全文
摘要:
提交情况 原题链 解题思路 整体思路:首先生成一个满足为n位的回文数,再判断其是否为素数。 细节问题:我们枚举一个长度为10^(n - 1) ÷ 2长度的数,将这个数的前(n - 1) ÷ 2 - 1个数放到原数的后方生成新的回文数。example:我们需要一个长度为3为的回文数,那么我们要枚举的数 阅读全文
摘要:
原题链 提交情况 解题思路: 广搜。首先读入,然后特判是不是不需要变换就直接是最后结果(有一个点)。接着入队当前状态,所需步数为$0$。然后就是普通广搜的过程。分为$4$个方向。每次进行扩展时,都现将表示当前状态的9位数变为一个3×3的矩阵,然后扩展,并判断是否合法。如果合法,则又将$3×3$的矩阵 阅读全文
摘要:
算法:广搜 解题思路: 因为要求最少的变换次数,所以很自然的想到要用广搜。广搜的初始状态为:10L的瓶子装满,其他的瓶子为空,接着只需要进行普通广搜即可。注意:因为有三个瓶子,故一共有6种移动状态: 1:从10L的瓶子向7L的瓶子中倒: if(x10 > 0 && x7 < 7){ x10 = x1 阅读全文
摘要:
原题链 ###提交情况 解题思路: DP。如果当前两个字符匹配,则步数不变,否则就进行判断:选出删除,插入或改变中的最小步数。 源代码 #include <bits/stdc++.h> using namespace std; char s1[2550],s2[2550]; int f[2002][ 阅读全文
摘要:
原题链 主要算法:并查集 主要思路: 先用结构体将每一对罪犯的怨气值储存,再用怨气值为关键词从大到小排序。现在,为了让事情的影响最小,我们需要让怨气值最大的一对罪犯不在同一个监狱,所以在从大到小的顺序合并的时候是: merge(a[i].x,a[i].y + n); merge(a[i].y,a[i 阅读全文
摘要:
原题链 解题思路: DP, f$[i][j]$表示前$i$个公司分配$j$台机器所取得的最大利润。当前的最大利润为:前$i - 1$个公司分配$k$台机器所取得的最大利润加上当前第$i$个公司分配$j - k$台机器所取得的利润的总和,与之前取得的最大利润的较大值。所以可以得出: maxx = ma 阅读全文
摘要:
原题链 算法:线段树的懒标记之乘法与加法 思路: 对于懒标记(重难点),我们采用先乘后加的方法。图片 代码 #include <bits/stdc++.h> using namespace std; struct node{//线段树定义 long long w,ad,mm; int l,r; }t 阅读全文
摘要:
原题链 提交情况:AC 主要算法: 这是一道广搜经典题,主要考察剪枝。现将每一根切断后的木棍输入并按照从大到小排序(剪枝1); 接着从木棍中的最大值开始枚举(剪枝2),一直枚举到所有木棍的总长,因为这些木棍是要拼接的,只有在最大长度之后的结果才有可能。 接着,我们考虑这么分是否合理:如果总长除以枚举 阅读全文