2014-10-26 Xie Jingyi
测试位置:WikiOI1078 type TEdge = record start, terminal: longint; weight: int64; end; TEdgeArr = array of TEdge; operator (e1, e2: TEdge)res: Boolean; begin res := e1.weight > e2.weight; end; procedure SortEdge(A: TEdgeArr; l, r: longint); var i, j: longint; t, m: TEdge; begin 继续阅读 »
2014-10-26 Xie Jingyi
题目 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:$\sum_{i=1}^{n}{(a_i-b_i)^2}$ ,其中 ai表示第一列火柴中第 i 个火柴的高度,bi表示第二列火柴中第 i 个火柴的高度。 每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 99,999,997 取模的结果。 分析 这真是一道好题——断断续续想了几天才完全AC。 事实上,由排序不等式可知: 当$a_i, b_i$从小到大排序时,距离 继续阅读 »
2014-10-25 Xie Jingyi
题目大意 输入a, b, k, n, m,计算$a^n\times b^m\times C_k^n$模10007的余数。 分析 对于幂数的计算并不难,关键在于对组合数$C_n^k$的计算。 通常来说,组合数的计算一般是这样的:$$C_n^k=\frac{n}{k}\times\frac{n-1}{k-1}\times\ldots\times\frac{n-k+1}{1}$$ 这对于单精度的计算来说是十分快捷的,但如果要对结果取模的话就不起作用了——取模运算对于除法不成立。因此只能另辟蹊径了。 注意到加减乘法对于取模都是成立的,从而想到:能否将组合数转化成加法? 自然而然,想到了组合恒等式:$$C_n^k=C_{n-1}^{k} 继续阅读 »
2014-10-24 Xie Jingyi
链接:Link 耗时:0.679s 分析 本质上,这是一道求数列通项的题目。我们列出前几个字符串: $$01,$$ $$1001,$$ $$01101001,$$ $$1001011001101001,$$ $$\ldots$$ 如果用$S_i$表示第i个字符串中“00”的个数,则有: $$S_1=0,\ S_2=1,\ S_3=1,\ S_4=3,\ S_5=5,\ S_6=11,\ldots$$ 经过观察可以发现有如下规律: $$S_n=2\times S_{n-1}+{(-1)}^n$$ 求通项就简单了,换个元即可: $$S_n=\frac{1}{3}[{(-1)}^n+2^{n-1}]$$ 程序采用高精度实现。 Cod 继续阅读 »
2014-10-23 Xie Jingyi
鉴于U盘中Sublime的配置常常莫名其妙地消失,在此将其记录一下。 Code { "cmd": ["fpc", "-S2", "${file}", "-o${file_path}/${file_base_name}.exe"], "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.pascal", "variants": [ { "name": "Run", "c 继续阅读 »
2014-10-19 Xie Jingyi
链接:Link 耗时:2.232s 分析 粗看题目,不过就是要求这样一个式子:$\sum_{i=1}^n{[\frac{n}{i}]}$的值。但注意到:题目给的数据范围极大,有$2^{31}-1$之多,若遍历计算,则时间复杂度为$O(n)$,将严重超时,不可取。 而事实上,通过尝试我们可以发现:$\sum_{i=1}^{n}{[\frac{n}{i}]}=2*\sum_{i=1}^{\sqrt n}{[\frac{n}{i}]}-{[\sqrt n]}^2$,这是一个重要的结论。因为这条式子一旦成立,时间复杂度即可从$O(n)$降为$O(\sqrt n)$,这是一个极为可观的改善。下面我们来证明一下这个结论: 事实上,$$\su 继续阅读 »
2014-10-17 Xie Jingyi
链接:Link 状态:WA 分析 做了两个小时,很可惜最终还是WA了。非常奇怪——和网上的C++代码运行结果完全一样,但却WA了。不过,在这里我还是记录一下解题的过程。 这道题数据量很小,直接爆搜每个空位,用*, +, -, #0来代表符号或不填。 Code const operators: array [1..4] of char = ('*', '+', '-', #0); //符号 var s: string; _, n: integer; op: array [0..10] of char; yes: Boolean; function toValue(ch: char): 继续阅读 »
2014-10-15 Xie Jingyi
链接:Link 耗时:0.699s 思路 dfs(t, x, y, d, s)表示当前走了t步,在(x,y),上一个方向为d,s为一个求和用的辅助变量。 当前位置无法走完剩下的路时直接回溯。可节省接近2s的时间。 ps: 这道题虽然没有明说每个城市只走一次,但它的确那样判了,这一点坑了我好久。 Code //Accepted. const dx: array [1..4] of integer = (1, 0, 0, -1); dy: array [1..4] of integer = (0, 1, -1, 0); dir: array [1..4] of char = ('e', 'n', 's', 继续阅读 »
2014-10-08 Xie Jingyi
从今天起至10月11日,持续连载。 关于计算机 ENIAC 出现于1946年。 是最早的计算机。 是电子管计算机。 其他 阶码,即浮点数的指数部分。 IPv6是128位的。 求补码:二进制下:各位取反再加1 或 把原码减1再取反。 关于算法 各种排序的时间复杂度 快速排序:$O(nlogn)$,最坏为$O(n^2)$。 冒泡排序:$O(n^2)$。 归并排序:$O(nlogn)$。 计数排序:$O(n)$。 插入排序:$O(n^2)$。 关于树 完全二叉树 vs 满二叉树:完全二叉树最后一层不一定满。 前序遍历:中左右;中序遍历:左中右;后序遍历:左右中。 节点数 继续阅读 »
2014-10-06 Xie Jingyi
链接:Link 状态:Runtime Error 前言 这题做的可真够久的,整整三个小时。但即便如此,还是只过了一部分的点,另一部分报运行时错误——估计是哈希表设计的不太好。但这确实是一道好题,因此,在睡觉前决定记录一下。 分析 很容易便想到:用一个三元组$(x,y,z)$表示节点,表示内容为x的节点下跟着标号为y和z的左右子树。这样一来,一类相同的子树便可以唯一确定了,而不必每构造一棵子树就把整棵树遍历一遍。 对于三元组的储存,刚开始图方便,用了数组。查找也是用了$O(n)$的线性查找。磕磕碰碰写了两个多小时然后兴冲冲地提交,结果TLE了…………没办法,只好又花了半个小时写了一个哈希表,然后就是上文说过的情况了:Runti 继续阅读 »