随笔分类 -  算法

摘要:Candies POJ - 3159 题意: 给班级小朋友分糖果,要求满足以下条件:给定$m$组关系$A,B,c$,表示$B$得到的糖果比$A$得到的不多于$c$个,即$candy[B]-candy[A]≤c$,求$1$号小朋友与$N$号小朋友糖果数之差的最大值。 思路: 线性差分约束。对式子$ca 阅读全文
posted @ 2020-07-28 23:11 StreamAzure 阅读(92) 评论(0) 推荐(0)
摘要:DNA sequence HDU - 1560 题意: 给定N个DNA序列(仅由ATCG构成),求能使得这N个序列均为其子序列的最短公共序列,输出这个最小的长度。 思路: IDA*,估价函数即N个序列中未匹配个数的最大值。(因为最理想情况是,当前所尝试的字母X加入公共序列之后,能同时与这N个序列匹配 阅读全文
posted @ 2020-07-25 12:39 StreamAzure 阅读(125) 评论(0) 推荐(0)
摘要:Escape HDU - 3533 题意: 小A要从$(0,0)\(逃到\)(n,m)$,他的精力值为$d$,每秒可以向东南西北四个方向走一格,或保持原地不动。但无论他是否移动,精力值每秒都会损失1点。路上他会遇到炮塔射击。给定$k$座炮塔的射击方向、射击间隔、子弹速度、坐标。第0秒小A开始逃跑,且 阅读全文
posted @ 2020-07-24 19:56 StreamAzure 阅读(114) 评论(0) 推荐(0)
摘要:HDU - 3567 Eight II 题意:八数码问题,给定初始状态与目标状态,输出字典序最小的移动路径和步数。 思路: 双向BFS: 以初始状态和目标状态为两个起点,同时出发,汇合时即答案 但需要注意,从初始状态出发的正向BFS所得路径必是字典序最小的(前提是方向遍历是按字典序从小到大);从目标 阅读全文
posted @ 2020-07-24 15:46 StreamAzure 阅读(162) 评论(0) 推荐(0)
摘要:Eight 题意:八数码问题 思路:反向BFS+康托展开 const int maxn = 362885; const int FAC[] = { 1,1,2,6,24,120,720,5040,40320,362880,3628800 }; int cantor(int* a) {//算出全排列对 阅读全文
posted @ 2020-07-23 23:30 StreamAzure 阅读(111) 评论(0) 推荐(0)
摘要:模板整理 二分(返回第一个等于x的元素的下标) int found(int a[],int left,int right,int x) { while (left < right) { int mid = (right + left) >> 1; if (a[mid] < x) left = mid 阅读全文
posted @ 2020-06-06 23:45 StreamAzure 阅读(268) 评论(0) 推荐(1)
摘要:二四六七八 **题意:**对于每组数据给定的 \(x\),\(y\) , 求 \([x,y]\) 内各个数位仅由 $2,4,6,7,8$ 构成的数的个数。其中$1≤x≤y≤10^{18}$ 思路: 算是板子题。卡住的点主要还是不清楚什么时候前导零是必须的。 另外不开longlong见祖宗 LL dp 阅读全文
posted @ 2020-06-05 03:01 StreamAzure 阅读(144) 评论(0) 推荐(0)
摘要:HDU 2089 不要62 int dp[10][2]; //dp[i][0]表示当前到哪一位,且前一位不是6 //dp[i][1]表示当前到哪一位,且前一位是6 int a[20]; LL dfs(int pos,bool six,bool limit){ //pos搜到的位置(从高位到低位),l 阅读全文
posted @ 2020-06-04 22:34 StreamAzure 阅读(117) 评论(0) 推荐(0)
摘要:POJ 1847 Tram **题意:**给一个有向图,输入第一行分别是节点数$n$,起点$a$,终点$b$。下面$n$行,第$i$行的第一个数$K_i$表示从节点$i$出发所能到达的节点的个数,接下来有$K_i$个数,给出具体节点,其中第一个节点为默认节点,边权为0,其它节点边权为1。求从$a$到 阅读全文
posted @ 2020-06-04 03:40 StreamAzure 阅读(81) 评论(0) 推荐(0)
摘要:CF1363C Game On Leaves 思路: 先考虑先手必胜的最后局面:节点$x$本身就是叶子节点;或将节点$x$看作根节点时,只剩下$2$个节点。 对于后者的情况,考虑之前的$n-2$个节点。只要第$n-2$个节点由后手取走即可,也就是$n-2$为偶数。 void solve() { in 阅读全文
posted @ 2020-06-04 00:11 StreamAzure 阅读(221) 评论(0) 推荐(0)
摘要:一、文件的储存形式 分为文本(ASCII码)文件与二进制文件两类。 文本文件 文件每一个字节存放一个ASCII码,代表一个字符。如整数123在文本文件中占3个字节。 二进制文件 将数据以其在内存中的形式原样存放。如整数123和整数1234在二进制文件中均占4个字节。 二、文件操作 //文件指针变量 阅读全文
posted @ 2020-06-03 01:18 StreamAzure 阅读(459) 评论(0) 推荐(0)
摘要:H. Binary Median 题意:给定$n$,\(m\),及$n$个二进制数,在由0到$2m-1$这$2m$个二进制数中删掉这$n$个数,求剩余二进制数的中位数。 LL trans(char s[]) { int len = strlen(s); int j=0; LL ans=0; whil 阅读全文
posted @ 2020-05-25 23:44 StreamAzure 阅读(212) 评论(0) 推荐(0)
摘要:POJ 2253 Frogger 题意:给$n$个结点的坐标,两两之间均可连通。找出在所有从结点$1$到结点$2$的路径中,最大边的权值(距离)最小的那一条,输出这个权值(距离)。 思路: POJ 1797 Heavy Transportation的镜像题……这里求的是最小生成树的最大边。 int 阅读全文
posted @ 2020-05-23 14:53 StreamAzure 阅读(144) 评论(0) 推荐(0)
摘要:POJ 1797 Heavy Transportation 题意:给一个无向图,找出在所有从结点$1$到结点$n$的路径中,最小边的权值最大的那一条。输出这个权值。 思路: 方法有两种:一是最短路变形,二是最大生成树。 这里先给出最大生成树的代码。最大生成树可以保证生成“最小边的权值最大的那一条路径 阅读全文
posted @ 2020-05-23 11:52 StreamAzure 阅读(256) 评论(0) 推荐(0)
摘要:线段树 线段树的根节点是整段区间,其它结点是由区间不断二分得到的子区间,其中叶子结点是区间的每个单独的元素。 存储 这里使用结构体存线段树。 struct Tree { int left, right; long long value, lazy;//结点维护的值及懒标记 }tree[4*maxn+ 阅读全文
posted @ 2020-05-22 18:31 StreamAzure 阅读(177) 评论(0) 推荐(0)
摘要:POJ 1511 Invitation Cards 题意:给一个有向图,求从结点1到各结点,再从各结点回到结点1的最小花费之和。 思路: 反向建边,没了。 一开始INF设成了0x3f3f3f3f,以为真的可以当无穷大用,洛谷那边WA一发才发现它表示的数量级是$10^9$,在本题不够用,遂改为1e17 阅读全文
posted @ 2020-05-22 00:02 StreamAzure 阅读(100) 评论(0) 推荐(0)
摘要:SPFA 即队列优化过的Bellman-Ford算法,可以处理带负权图。 应用于单源最短路。 此外还可以进行负权环的判定,即若第n次操作仍可降低花费,则一定存在负权环。 //Bellman-Ford算法 for (int i = 0; i < n; i++) d[i] = INF; d[0] = 0 阅读全文
posted @ 2020-05-21 21:01 StreamAzure 阅读(119) 评论(0) 推荐(0)