![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
USACO 2
文章平均质量分 69
YY19970227
这个作者很懒,什么都没留下…
展开
-
Section 2.1 The Castle
先用DFS做一个Flood Fill 然后枚举墙并判断 记住按照题目要求枚举 具体看标程 这题是挺难的 { ID: yaoyuan4 PROG: castle LANG: PASCAL } Program castle; type css = record west, north, east, south : boolean; end; const fx : array[1..4] of longint = (1,原创 2010-08-23 18:02:00 · 445 阅读 · 0 评论 -
Section 2.3 Training Gateway
<br />用递归模拟出每一种可能,再用一个过程判断即可<br /><br />{<br />ID: yaoyuan4<br />PROG: zerosum<br />LANG: PASCAL<br />}<br />Program zerosum;<br /> const<br /> inf = 'zerosum.in'; outf = 'zerosum.out';<br /> var<br /> n : longint;<br /> s : string;<br /> Function ff(d原创 2011-03-07 18:02:00 · 387 阅读 · 0 评论 -
Section 2.2 Party Lamps
首先 动1号灯必动7号灯 动2号灯必动8号灯 这样就可以压缩成6个灯 其次 一个按钮按两下等于没按 没按还按啥啊 这样就只有4种按法 接下来做一个 递归回溯就可以了 转换2进制排序的时候只要转前6位 因为前6位大的后面一定大 { ID: yaoyuan4 PROG: lamps LANG: PASCAL } Program lamps; type conan = array[1..6] of boolean; lan = record原创 2010-08-27 18:17:00 · 414 阅读 · 0 评论 -
Section 2.2 Runaround Numbers
从M+1开始枚举并判断是否为循环数 注意循环数的性质 数字各不相同 循环到每一个数位 { ID: yaoyuan4 PROG: runround LANG: PASCAL } Program runround; const inf = 'runround.in'; outf = 'runround.out'; var m, ans : longint; f : array[0..10] of longint; Proced原创 2010-08-27 11:53:00 · 346 阅读 · 0 评论 -
Section 2.2 Subset Sums
这题纠结了一天多 其实想明白了就是个动态规划 更说白点就是个背包 找出和为 N*(N+1) div 4 的方案数 但是如果N*(N+1) div 2 为奇数, 不用找了,肯定不行 然后就做背包 把1。。。N,放进了 F[i] 记录 和为i的方案数 核心DP方法如下 for i := 1 to n do for j := s-i downto 0 do if f[j] > 0 then inc(f[j + i], f[j]); 这个方法绝对是原创 2010-08-27 10:34:00 · 307 阅读 · 0 评论 -
Section 2.2 Preface Numbering
稍加分析可知罗马数字实际上就是各个位所对应的罗马数字 以252为例 2 对应II 50对应L 200 对应CC,合起来就是 252 = CCLII 由于范围是3500, 就选预存各个数位上的罗马数字 然后构建罗马数字 统计各个字母出现的数量 { ID: yaoyuan4 PROG: preface LANG: PASCAL } Program preface; const inf = 'preface.in'; outf = 'preface.out';原创 2010-08-25 14:08:00 · 386 阅读 · 0 评论 -
Section 2.1 Hamming Codes
ans数组用来存结果 ans[1] 为0,然后枚举 知道找出n个 不必排序, 先找出来的一定小 至于判断两个数的海明距离, 用 A = A xor B 再A中1的个数即可 具体参加 百度百科 位运算 http://baike.baidu.com/view/379209.htm?fr=ala0_1 { ID: yaoyuan4 PROG: hamming LANG: PASCAL } Program hamming; const inf = 'hamm原创 2010-08-24 21:35:00 · 323 阅读 · 0 评论 -
Section 2.1 Healthy Holsteins
官方分析是2进制枚举 0表示不用 1表示用 而我用的是递归回溯 找到数量最小的并输出 { ID: yaoyuan4 PROG: holstein LANG: PASCAL } Program holstein; const inf = 'holstein.in'; outf = 'holstein.out'; var v, g, total, totali : longint; fx, fy : array[1..1000]原创 2010-08-24 20:17:00 · 363 阅读 · 0 评论 -
Section 2.1 Sorting A Three-Valued Sequence
用一个数组存原始数据, 一个数组存目标数据 再用一个记录数组 存1,2,3的开始数据与结束的位置 然后找可以一次匹配的, 通过一次交换使两个数都到目标位置的, ans + 1 找完以后再找 3个匹配的, 这需要2次交换 ans + 2 输出ans即可 { ID: yaoyuan4 PROG: sort3 LANG: PASCAL } Program sort3; type date = record op, ed : longint;原创 2010-08-24 18:03:00 · 285 阅读 · 0 评论 -
Section 2.1 Ordered Fractions
我用的是枚举所有分数 判断是否是最简分数 是就加入数组 0/1 和1/1 单独存 然后快排 比较可以用交叉相乘 这样便可不计算分数值 USACO 官方题解是用递归 初始0/1 和 1/1 , 然后分母相加 分子相加 { ID: yaoyuan4 PROG: frac1 LANG: PASCAL } Program frac1; type date = record a, b : longint; end; const原创 2010-08-24 13:06:00 · 488 阅读 · 0 评论 -
Section 2.3 Money Systems
<br />动态规划思想, 完全背包,迭代。<br />f[i+j] := f[i+j] + f[i];<br /><br />{<br />ID: yaoyuan4<br />PROG: money<br />LANG: PASCAL<br />}<br />Program money;<br /> const<br /> inf = 'money.in'; outf = 'money.out';<br /> var<br /> v, n, i, j, a : longint;<br /> f :原创 2011-03-08 17:37:00 · 355 阅读 · 0 评论