JSOI2007夏令营考试(A层次)
——走进桃花岛
命题:林厚从
繁忙的一个学期过去了
JSOI夏令营也快结束了
下面……
可以一生轻松地玩玩了
到哪儿呢……
一起去传说中的桃花岛吧
那儿有黄药师、黄蓉、……
还有很多挑战等着我们呢!
题 目 |
入 门 |
考 验 |
游览 |
源程序名 |
a.pas(c,cpp) |
b.pas(c,cpp) |
c.pas(c,cpp) |
输入文件名 |
a.in |
b.in |
c.in |
输出文件名 |
a.out |
b.out |
c.out |
每个测试点的时限 |
1秒 |
1秒 |
1秒 |
测试点个数*分值 |
10*10 |
10*10 |
10*10 |
满分 |
100分 |
100分 |
100分 |
考试时间:3个小时 考试满分:300分
友情提醒:请在FP1.0.10\WIN32下编译
提交程序的文件夹位置和名字必须严格按照考试要求
题1:入门(a.???)
不是任何人都可以进入桃花岛的,黄药师最讨厌象郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩上去就会有喷出要命的毒气,那你就死翘翘了,我们认为是不安全的。你只能从一块安全的瓷砖上走到与他相邻的四块瓷砖中的任何一个上,但它也必须是安全的才行。
由于你是黄蓉的朋友,她事先告诉你哪些砖是安全的、哪些砖是不安全的,并且她会指引你飞到第1块砖上(第1块砖可能在任意安全位置),现在她告诉你进入桃花岛的秘密就是:如果你能走过最多的瓷砖并且没有死,那么桃花岛的大门就会自动打开了,你就可以从当前位置直接飞进大门了。
注意:瓷砖可以重复走过,但不能重复计数。
输入:
第1行两个正整数W和H,分别表示小路的宽度W和长度H,W和H都不大于20。
以下H行为一个H*W的字符矩阵。每一个字符代表一块瓷砖。其中,“.”代表安全的砖,“#”代表不安全的砖,“@”代表第1块砖。
输出:
输出一行,只包括一个数,即你从第1块砖开始所能安全走过的最多的砖块个数(包括第1块砖)。
样例输入:
11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........
样例输出:
59
这一题是基础算法,直接一个深搜染色遍历即可
http://www.cnblogs.com/oijzh/archive/2012/08/21/2648505.html
题2:考验(b.???)
大家知道,黄药师不仅武功高超,而且酷爱音乐和诗歌。看到桃花岛来了个新客人,而且不是靠真武功近来的,就准备为难为难你。
他写了一首N行诗句的诗歌,美中不足的是这些诗句并不押韵,黄药师非常想遵循古诗的押韵。诗歌被分为若干段,每段都是四行诗。每一句诗都有一个韵脚,假如A和B表示两种不同的韵脚,每段四行诗的韵脚只可能是 “AABB”, “ABAB”, “ABBA” 和“AAAA”中的一种。
黄药师将诗句的韵脚都编了号,具有相同编号的句子代表有相同的韵脚。现在,黄药师想删掉一些句子,使得剩下的都是遵循押韵规则的四行诗,而且不允许改变诗句的顺序。
现在就问你:如何找出满足条件最长的诗歌?
输入:
第1行为一个整数N(1<=N<=4000),代表黄药师写的诗歌的句子数。
第2行为N个整数,分别表示每一行诗的韵脚,这些数字都是不超过10^9的正数,每个数之间用1个空格隔开。
输出:
一行一个整数k,为黄药师最多能够得到的四行诗个数。
样例输入:
15
1 2 3 1 2 1 2 3 3 2 1 1 3 2 2
样例输出:
3
提示:
删除第3、6、13句诗,就可以分成3个四行诗,分别为:
1 2 4 5
7 8 9 10
11 12 14 15
这一题很显然要用到动规,枚举最后一首诗,f[i]分两类,一类是以 i 结尾,而另一类是不以 i 结尾
http://www.cnblogs.com/oijzh/archive/2012/08/21/2648503.html
题3:游览(c.???)
顺利通过了黄药师的考验,下面就可以尽情游览桃花岛了!
你要从桃花岛的西头开始一直玩到东头,然后在东头的码头离开。可是当你游玩了一次后,发现桃花岛的景色实在是非常的美丽!!!于是你还想乘船从桃花岛东头的码头回到西头,再玩一遍,但是桃花岛有个规矩:你可以游览无数遍,但是每次游玩的路线不能完全一样。
我们把桃花岛抽象成了一个图,共n个点代表路的相交处,m条边表示路,边是有向的(只能按照边的方向行走),且可能有连接相同两点的边。输入保证这个图没有环,而且从西头到东头至少存在一条路线。两条路线被认为是不同的当且仅当它们所经过的路不完全相同。
你的任务是:把所有不同的路线游览完一共要花多少时间?
输入:
第1行为5个整数:n、m、s、t、t0,分别表示点数,边数,岛西头的编号,岛东头的编号(编号是从1到n)和你乘船从岛东头到西头一次的时间。
以下m行,每行3个整数:x、y、t,表示从点x到点y有一条行走耗时为t的路。
每一行的多个数据之间用一个空格隔开,且:2<=n<=10000; 1<=m<=50000;t<=10000;t0<=10000
输出:
假设总耗时为total,则输出total mod 10000的值(total对10000取余)。
输入样例:
3 4 1 3 7
1 2 5
2 3 7
2 3 10
1 3 15
输出样例:
56
样例说明:
共有3条路径可以从点1到点3,分别是1-2-3,1-2-3,1-3。
时间计算为:
(5+7)+7 +(5+10)+7 +(15)=56
这一题深搜能得40分,所以要用到加法原理和乘法原理进行优化
http://www.cnblogs.com/oijzh/archive/2012/08/21/2648501.html