北大信科上机题文档格式.docx
《北大信科上机题文档格式.docx》由会员分享,可在线阅读,更多相关《北大信科上机题文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
101
202
301
7
201
21
103
1002
82
520
5010
样例输出
80
185
GlobalNo.
提示
Thesampleinputcontainstwoproductsets.Thefirstsetencodestheproductsfromtable1.Thesecondsetisfor7products.Theprofitofanoptimalschedulefortheseproductsis185.
B:
uCalculatee
1000ms
10000kB
219
87
Asimplemathematicalformulaforeis
e=Σ0<
=i<
=n1/i!
wherenisallowedtogotoinfinity.Thiscanactuallyyieldveryaccurateapproximationsofeusingrelativelysmallvaluesofn.
Noinput
Outputtheapproximationsofegeneratedbytheaboveformulaforthevaluesofnfrom0to9.Thebeginningofyouroutputshouldappearsimilartothatshownbelow.
noinput
ne
------------
01
12
2
3
4
...
C:
Misspelling
215
Misspellingisanartformthatstudentsseemtoexcelat.Writeaprogramthatremovesthenthcharacterfromaninputstring.
ThefirstlineofinputcontainsasingleintegerN,(1≤N≤1000)whichisthenumberofdatasetsthatfollow.
EachdatasetconsistsofasinglelineofinputcontainingM,aspace,andasinglewordmadeupofuppercaselettersonly.Mwillbelessthanorequaltothelengthoftheword.Thelengthofthewordisguaranteedtobelessthanorequalto80.
Foreachdataset,youshouldgenerateonelineofoutputwiththefollowingvalues:
Thedatasetnumberasadecimalinteger(startcountingatone),aspace,andthemisspelledword.Themisspelledwordistheinputwordwiththeindicatedcharacterdeleted.
4
4MISSPELL
1PROGRAMMING
7CONTEST
3BALLOON
1MISPELL
2ROGRAMMING
3CONTES
4BALOON
D:
文件结构“图”
56
8
在计算机上看到文件系统的结构通常很有用。
MicrosoftWindows上面的"
explorer"
程序就是这样的一个例子。
但是在有图形界面之前,没有图形化的表示方法的,那时候最好的方式是把目录和文件的结构显示成一个"
图"
的样子,而且使用缩排的形式来表示目录的结构。
比如:
ROOT
|
dir1
file1
file2
file3
dir2
dir3
这个图说明:
ROOT目录包括两个文件和三个子目录。
第一个子目录包含3个文件,第二个子目录是空的,第三个子目录包含一个文件。
你的任务是写一个程序读取一些测试数据。
每组测试数据表示一个计算机的文件结构。
每组测试数据以'
*'
结尾,而所有合理的输入数据以'
#'
结尾。
一组测试数据包括一些文件和目录的名字(虽然在输入中我们没有给出,但是我们总假设ROOT目录是最外层的目录)。
在输入中,以'
]'
表示一个目录的内容的结束。
目录名字的第一个字母是'
d'
,文件名字的第一个字母是'
f'
。
文件名可能有扩展名也可能没有(比如和fmyfile)。
文件和目录的名字中都不包括空格。
在显示一个目录中内容的时候,先显示其中的子目录(如果有的话),然后再显示文件(如果有的话)。
文件要求按照名字的字母表的顺序显示(目录不用按照名字的字母表顺序显示,只需要按照目录出现的先后显示)。
对每一组测试数据,我们要先输出"
DATASETx:
"
,这里x是测试数据的编号(从1开始)。
在两组测试数据之间要输出一个空行来隔开。
你需要注意的是,我们使用一个'
|'
和5个空格来表示出缩排的层次。
]
file4
*
#
DATASET1:
DATASET2:
一个目录和它的子目录处于不同的层次
一个目录和它的里面的文件处于同一层次
E:
文本对齐
5000ms
131072kB
24
1
HTML支持四种文本对齐方式:
左对齐、右对齐、居中和两边对齐。
比较下面的例子:
对齐方式
例子
左对齐
Manyyearslater,ashefacedthefiringsquad,ColonelAurelianoBuendia
wastorememberthatdistantafternoonwhenhisfathertookhimtodiscover
ice.
右对齐
居中
两边对齐
Many
years
later,ashefacedthefiringsquad,ColonelAurelianoBuendia
文本模式浏览器通过在相邻单词之间插入空格来显示对齐文本。
在这里,但此就是由不是空格的字符组成的字符串。
现在你要来实现一个小程序来按下表指定的方式模仿文本模式浏览器在显示对齐文本时的行为。
显示效果
空格
文本靠左显示。
相邻单词间用一个空格分隔。
文本靠右显示。
文本居中显示。
每行第一个单词前的空格数不能少于最后一个单词后的空格数,同时前者最多比后者多1。
文本对齐到行的两段边界。
只包含一个单词的行和最后一行左对齐。
不要求左对齐的行有一个特殊的方式来插入空格。
相邻的单词之间可以有多个空格。
对于同一行上两个“空隙”来说,左边不能比右边的窄,同时又不能比右边多2个或以上的空格。
你的程序用贪心的方式工作,也就是说,尽量多的单词应该被放入第一行,然后尽量多的单词应该被放入第二行,如此类推。
行的宽度在你的程序里固定为75个字符。
输入只包含一组占据多行的测试数据。
第一行包含“L”、“R”、“C”和“J”之中的一个字母,分别代表一些文本要被左对齐、右对齐、居中或两边对齐显示。
文本的单词在接下来最多五行中。
同一行中的单词至少被一个空格分隔。
单词只包括ASCII代码在33和126之间的字符,长度小于75个字符。
输出你的小程序产生的对齐显示后的文字。
J
Manyyearslater,ashefacedthefiringsquad,ColonelAurelianoBuendiawastoremember
thatdistantafternoonwhenhisfathertookhimtodiscoverice.
F:
魔兽世界
魔兽世界的西面是红魔军的司令部,东面是蓝魔军的司令部。
两个司令部之间是依次排列的若干城市,城市从西向东依次编号为1,2,3....N(N<
=20)。
两军的司令部都会制造武士。
武士一共有dragon、ninja、iceman、lion、wolf五种。
每种武士都有编号、生命值、攻击力这三种属性。
双方的武士编号都是从1开始计算。
红方制造出来的第n个武士,编号就是n。
同样,蓝方制造出来的第n个武士,编号也是n。
武士在刚降生的时候有一个初始的生命值,生命值在战斗中会发生变化,如果生命值减少到0或少于0,则武士死亡(消失)。
在每个整点,即每个小时的第0分,双方的司令部中各有一个武士降生。
红方司令部按照iceman、lion、wolf、ninja、dragon的顺序制造武士。
蓝方司令部按照lion、dragon、ninja、iceman、wolf的顺序制造武士。
制造武士需要生命元。
制造一个初始生命值为m的武士,司令部中的生命元就要减少m个。
如果司令部中的生命元不足以制造某武士,那么司令部就等待,直到获得足够生命元后的第一个整点,才制造该武士。
例如,在2:
00,红方司令部本该制造一个wolf,如果此时生命元不足,那么就会等待,直到生命元足够后的下一个整点,才制造一个wolf。
在每个小时的第10分:
所有的武士朝敌人司令部方向前进一步。
即从己方司令部走到相邻城市,或从一个城市走到下一个城市。
或从和敌军司令部相邻的城市到达敌军司令部。
在每个小时的第20分:
每个城市产出10个生命元。
生命元留在城市,直到被武士取走。
在每个小时的第30分:
如果某个城市中只有一个武士,那么该武士取走该城市中的所有生命元,并立即将这些生命元传送到其所属的司令部。
在每个小时的第40分:
在有两个武士的城市,会发生战斗。
在每个小时的第50分,司令部报告它拥有的生命元数量。
每次战斗有且只有一方武士主动进攻。
被攻击者生命值会减去进攻者的攻击力值。
如果被攻击者生命值减至小于等于0,则其被杀死。
如果被攻击者没有被杀死,则会发动反击,被反击者的生命值要减去反击者攻击力值的一半(去尾取整)。
反击当然可能致敌人于死地。
如果武士在战斗中杀死敌人(不论是主动进攻杀死还是反击杀死),则其司令部会立即向其发送8个生命元作为奖励,使其生命值增加8。
当然前提是司令部得有8个生命元。
如果司令部的生命元不足以奖励所有的武士,则优先奖励距离敌方司令部近的武士。
如果某武士在某城市的战斗中杀死了敌人,则该武士的司令部立即取得该城市中所有的生命元。
注意,司令部总是先奖励武士,然后再收回打了胜仗的城市的生命元。
对于因司令部生命元不足而领不到奖励的武士,司令部也不会在取得战利品生命元后为其补发奖励。
每次战斗都只有一方主动进攻一次。
战斗并非是你死我活的,可能是双方都幸存。
如果双方都幸存,则双方都不能拿走发生战斗的城市的生命元
在插红旗的城市,以及编号为奇数的无旗城市,由红武士主动发起进攻。
在插蓝旗的城市,以及编号为偶数的无旗城市,由蓝武士主动发起进攻。
一开始所有的城市都是无旗的。
当某个城市有连续两场战斗都是同一方的武士杀死敌人(两场战斗中间如果有若干个战斗时刻并没有发生战斗,则这两场战斗仍然算是连续的),那么该城市就会插上胜方的旗帜,若原来插着败方的旗帜,则败方旗帜落下。
旗帜一旦插上,就一直插着,直到被敌人更换。
一个城市最多只能插一面旗帜,旗帜没被敌人更换前,也不会再次插同颜色的旗。
不同的武士各有其特点:
dragon在一次在它主动进攻的战斗结束后,如果还没有战死,就会欢呼。
ninja挨打了也从不反击敌人。
iceman每前进两步,在第2步完成的时候,生命值会减少9,攻击力会增加20。
但是若生命值减9后会小于等于0,则生命值不减9,而是变为1。
即iceman不会因走多了而死。
lion若是战死,则其战斗前的生命值就会转移到对手身上。
在一个wolf通过主动攻击杀死敌人的次数达到偶数的时刻(次数从1开始算),在战斗完成后,该wolf生命值和攻击力都增加1倍。
如果其杀死的敌人是lion,则攻击力和生命值先加倍,然后才吸取lion的生命值。
获取总部的生命元奖励,发生在加倍之后。
只有在主动攻击杀死敌人时才能有加倍的事情,反击杀死敌人则不不会发生加倍。
武士到达对方司令部后就算完成任务了,从此就呆在那里无所事事。
任何一方的司令部里若是出现了2个敌人,则认为该司令部已被敌人占领。
任何一方的司令部被敌人占领,则战争结束。
战争结束之后就不会发生任何事情了。
给定一个时间,要求你将从0点0分开始到此时间为止的所有事件按顺序输出。
事件及其对应的输出样例如下:
1)武士降生
输出样例:
000:
00bluelion1born
表示在0点0分,编号为1的蓝魔lion武士降生
2)武士前进到某一城市
10rediceman1marchedtocity1with20elementsandforce30
表示在0点10分,红魔1号武士iceman前进到1号城市,此时他生命值为20,攻击力为30
对于iceman,输出的生命值和攻击力应该是变化后的数值
3)武士主动进攻
000:
40rediceman1attackedbluelion1incity1with20elementsandforce30
表示在0点40分,1号城市中,红魔1号武士iceman进攻蓝魔1号武士lion,在发起进攻前,红魔1号武士iceman生命值为20,攻击力为30
4)武士反击
001:
40bluedragon2foughtbackagainstredlion2incity1
表示在1点40分,1号城市中,蓝魔2号武士dragon反击红魔2号武士lion
5)武士战死
40redlion2waskilledincity1
6)武士欢呼
003:
40bluedragon2yelledincity4
7)武士获取生命元(elements)
40bluedragon2earned10elementsforhisheadquarter
8)旗帜升起
004:
40blueflagraisedincity4
9)武士抵达敌军司令部
10rediceman1reachedblueheadquarterwith20elementsandforce30
(此时他生命值为20,攻击力为30)对于iceman,输出的生命值和攻击力应该是变化后的数值
10)司令部被占领
10blueheadquarterwastaken
11)司令部报告生命元数量
50100elementsinredheadquarter
50120elementsinblueheadquarter
表示在0点50分,红方司令部有100个生命元,蓝方有120个
输出事件时:
首先按时间顺序输出;
同一时间发生的事件,按发生地点从西向东依次输出.武士前进的事件