USACO 1
文章平均质量分 74
YY19970227
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Section 1.1 Greedy Gift Givers
仍然是只需根据条件进行模拟 定义记录people,表示人名 和 钱 定义函数find, 给定字符串 返回位置 此外注意 0 不能 做 除数 { ID: yaoyuan4 PROG: gift1 LANG: PASCAL } Program gift1; type people = record namei : string; moneyi : longint; end; const inf = 'gi原创 2010-08-19 17:16:00 · 307 阅读 · 0 评论 -
Section 1.4 Arithmetic Progressions
咱不会搜索啊 只会枚举 于是就枚举a, b 要求b 在前 所以先枚举b 后枚举a 这样便省去的排序 当然还得先做个布尔数组 存所有双平方数 接下来就 很容易了 关键是a, b的范围 这就要靠RP了 通过分析数据 当m div n > 8 时 b 的 范围可以从 1 to m*m 缩小的1 to m*m div n 靠这个无良的优化 咱便顺利的过掉了此题 但是考试时咋办捏? 要么好好学搜索 至少要会算时间复杂度 { ID: yaoyuan4 PROG: ariprog LAN原创 2010-08-23 00:24:00 · 510 阅读 · 0 评论 -
Section 1.5 SuperPrime Rib
开头只可能是2,3,5,7 结尾只可能是 1,3,7,9 知道了这个 递归求解即可 这是一道练递归的好题 { ID: yaoyuan4 PROG: sprime LANG: PASCAL } Program sprime; const fx : array[1..4] of longint = (2, 3, 5, 7); fy : array[1..4] of longint = (1, 3, 7, 9); inf = 'sprime.原创 2010-08-23 14:58:00 · 472 阅读 · 0 评论 -
Section 1.5 Checker Challenge
这是个典型的n皇后问题 参见百度百科 8皇后问题 http://baike.baidu.com/view/622604.htm 然后用一个链表技术加以优化即可 http://blog.youkuaiyun.com/YY19970227/archive/2010/08/23/5832012.aspx 也就是我转载的那个 { ID: yaoyuan4 PROG: checker LANG: PASCAL } Program checker; const maxn =原创 2010-08-23 19:58:00 · 422 阅读 · 0 评论 -
Section 1.3 Barn Pepair
要修M牛棚 则有M-1段是空着的 自然找出前M-1个最大空隙不计 此题数据不大 用排序的话显得普通代码过于臃肿 本人使用的是计算排序思路 开一个 1..200 的数组来记录 代码如下 { ID: yaoyuan4 PROG: barn1 LANG: PASCAL } Program barn1; const inf = 'barn1.in'; outf = 'barn1.out'; var m, s, c, ans : longint;原创 2010-08-21 21:22:00 · 592 阅读 · 0 评论 -
Section 1.4 Prime Cryptarithm
由于数据足够小 只有枚举并判断就行了 由于要多次判断 不用函数将很麻烦 { ID: yaoyuan4 PROG: crypt1 LANG: PASCAL } Program crypt1; const inf = 'crypt1.in'; outf = 'crypt1.out'; var n, ans : longint; f : array[0..9] of boolean; Procedure init; va原创 2010-08-22 00:43:00 · 338 阅读 · 0 评论 -
Section 1.5 Number Triangles
这是一道经典且容易的动态规划(dynamic programming)简称DP 状态转移方程很容易得出 f(i,j) = max(f(i,j) + max(f(i-1,j), f(i-1,j-1)),f(i,j); 当然此题没有复数 所以直接Inc 即可 本人一次AC { ID: yaoyuan4 PROG: numtri LANG: PASCAL } Program numtri; const inf = 'numtri.in'; outf = 'num原创 2010-08-23 13:59:00 · 599 阅读 · 1 评论 -
Section 1.2 Palindromic Squares
枚举并判断回文 { ID: yaoyuan4 PROG: palsquare LANG: PASCAL } Program palsquare; type num = array[0..1000] of longint; const inf = 'palsquare.in'; outf = 'palsquare.out'; var n : longint; a, b : num; Procedure in原创 2010-08-20 19:15:00 · 410 阅读 · 0 评论 -
Section 1.2 Dual Palindromes
枚举并判断双回文 本人用了几个过程 shift 进制转换 pal 判断回文 用过程和函数 分步解题 思路就明确了 { ID: yaoyuan4 PROG: dualpal LANG: PASCAL } Program dualpal; type num = array[0..100] of longint; const inf = 'dualpal.in'; outf = 'dualpal.out'; var n,原创 2010-08-21 11:02:00 · 344 阅读 · 0 评论 -
Section 1.5 Prime Palindromes
想法一定要对 枚举没错 关键是构建回文还是构建质数 明显是构建回文 于是本人就用一个 i := 1 to 1000 来构建回文 如250 通过构建变成了 25052 其次 偶数位的回文不是质数 通过数学证明 偶数位的回文数必为11 的倍数 但是11 是个特例 它是回文质数 我用9来表示11 如果当i 循环到9时就不进行变化 直接变成11 我用pal 构建回文 ok 判断质数 结果是1次AC 真爽!!! { ID: yaoyuan4 PROG: pprime LANG: PAS原创 2010-08-23 14:31:00 · 509 阅读 · 0 评论 -
Section 1.4 The Clocks
枚举每一种方案就可以过 本人用的是递归处理 思路很容易想 关键是细节处理 做了蛮久的 递归要好好学啊 { ID: yaoyuan4 PROG: clocks LANG: PASCAL } Program clocks; type clock = array['A'..'I'] of longint; answer = array[1..9] of longint; const inf = 'clocks.in'; outf =原创 2010-08-22 23:07:00 · 456 阅读 · 0 评论 -
Section 1.4 Packing Rectangles
此题是IOI的水平竟放在Section 1 里不可思议 鉴于此题过于难 本人就百度了一下 结果发现N多人代码完全相同 本人也就不好意思说啥了 于是本人就找了一个PASCAL 的代码来分析 先把图标上号 本人是用f[1..4,1..2]来存的 1..4表示图形 1..2记录横竖 有人会问为啥不用记录来存呢?到后面就清楚了 然后枚举编号以及横竖 我是用s数组和d数组做的 通过枚举,又可以的到2个数组 x, y x记录横着的 y记录竖着的 然后就是公式了 用m 记录长 n记录宽 则原创 2010-08-22 16:46:00 · 521 阅读 · 0 评论 -
Section 1.1 Firday the Thirteenth
1990 、1、13 在 Saturday 用next 过程 计算下一个 13号 在 星期几 具体看程序 { ID: yaoyuan4 PROG: friday LANG: PASCAL } Program friday; const mo : array[1..12] of longint = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); inf = 'friday.in'; o原创 2010-08-19 11:08:00 · 386 阅读 · 0 评论 -
Section 1.1 Your Ride Is Here
模拟 { ID: yaoyuan4 PROG: ride LANG: PASCAL } Program ride; const yes = 'GO'; no = 'STAY'; inf = 'ride.in'; outf = 'ride.out'; var flag : boolean; x, y : string; a : array['A'..'Z'] of longint; Pr原创 2010-08-19 11:31:00 · 400 阅读 · 0 评论 -
Section 1.1 Broken Necklace
根据题意 数据结构明显是 双向链表 并且用双向链表 处理也很方便 过程init 用的就是 构造双向链表 接着就是 枚举从哪部分 断开 如果 出现 w, 就把w 赋为 他的前驱 或者 后继 { ID: yaoyuan4 PROG: beads LANG: PASCAL } Program beads; type link = record date : char; next, prior : longint; end;原创 2010-08-19 23:03:00 · 428 阅读 · 0 评论 -
Section 1.2 Milking Cows
建立一个很大的布尔数组 然后在 挤奶的时间上赋上 true 最后 查找即可 注意 若挤奶的时间为 A B, 循环 应从 A to B-1 { ID: yaoyuan4 PROG: milk2 LANG: PASCAL } Program milk2; const inf = 'milk2.in'; outf = 'milk2.out'; var n, maxi, mini, ansi, ansx : longint; f : a原创 2010-08-20 00:53:00 · 409 阅读 · 0 评论 -
Section 1.2 Transformations
定义a是原始状态,b是改变后的状态。 右旋 b[j, n-i+1] ← a[i, j] 镜像 b[i, n-j+1] ← a[i, j] 找出规律是第一步 接下来就是枚举 当然USACO 细节超多 要慢慢解决 { ID: yaoyuan4 PROG: transform LANG: PASCAL } Program transform; type pic = array[1..10, 1..10] of char; const in原创 2010-08-20 03:07:00 · 307 阅读 · 0 评论 -
Section 1.2 Name That Number
此题主要考察文件操作 由于数据量小 所以可以顺序查找 至于字母与数字的对应 可以直接打表 { ID: yaoyuan4 PROG: namenum LANG: PASCAL } Program namenum; const inf = 'namenum.in'; outf = 'namenum.out'; txt = 'dict.txt'; a : array['A'..'Z'] of char = ('2', '2', '2', '3',原创 2010-08-20 15:09:00 · 355 阅读 · 0 评论 -
Section 1.3 Mixing Milk
贪心思路 从最便宜的开始买起 ∵Pi 的范围为 0~1000 ∴可以构筑一个 0..1000 的数组F 在Pi 的位置上加上 Ai 然后遍历 这个F 数组即可 排序都不需要 { ID: yaoyuan4 PROG: milk LANG: PASCAL } Program milk; const inf = 'milk.in'; outf = 'milk.out'; var n, m, ans : longint; f : ar原创 2010-08-21 16:33:00 · 444 阅读 · 0 评论 -
Section 1.3 Calf Flac
另存一个记录数组 date记录字母 大小写应统一 op记录在原数组中出现的位置 这就将原题转换为 字母求回文了 再枚举中间的情况2种 ASA 和ASSA 这样就变得容易很多了 记住数组要开大 { ID: yaoyuan4 PROG: calfflac LANG: PASCAL } Program calfflac; const inf = 'calfflac.in'; outf = 'calfflac.out'; type calf原创 2010-08-22 00:18:00 · 400 阅读 · 0 评论 -
Section 1.4 Mother's Milk
由于数据过小, 采取枚举所以的方案 我采用的是递归 用vip(x, y, z) 表示 a, b, c杯中水的情况 另外采用Orz 过程模拟倒水情况 只要想清楚了 我是1次AC的 { ID: yaoyaun4 PROG: milk3 LANG: PASCAL } Program milk3; const inf = 'milk3.in'; outf = 'milk3.out'; var a, b, c : longint; f : arr原创 2010-08-23 12:30:00 · 359 阅读 · 0 评论
分享