【题目】
Given a set of files, of which the sizes will not
exceed 10 Gigabytes, find out whether an input string appears or
not.
Your program is judged based on correctness and searching
time.
Your program is allowed some preparation time no longer
than one
hour.
【具体要求】
1、题目及示例:
给定几个目标字符串和一系列文件,判断每个字符串分别在哪些文件中出现过。
给定的文件格式如下:
target.txt:需要寻找的字符串
N
(需要寻找的字符串个数)
目标字符串,每个字符串一行
filename.txt:需要搜索的文件的文件名
M
(文件个数)
各个文件名,所有文件名都是“数字.txt”的格式,而且都是按1、2、3、4的顺序排列的
文件名.txt:需要被搜索的文件,每个里面都是一个很长的字符序列
字符序列
结果写入到output.txt中
分成N行写,N是需要寻找的字符串个数。
第k行写出第k个字符串所在的文件名,文件名按从小到大排列,不用写.txt,文件名之间用空格隔开
例如:
target.txt
2
abc
\5a
filename.txt
3
1.txt
2
2.txt
3.txt
1.txt:
Asdfg
hjkld
2.txt:
dfghjabc
3.txt
2f\5abc3
可以看出2.txt和3.txt中都包含有字符串abc,3.txt中包含字符串\5a,所以output.txt中的结果是
2
3
3
其中,被搜索的文件名都是以“数字.txt”的格式命名的。
被搜索的文件中,所有char型的字符都有可能出现。要搜索的目标字符串中的字符都在ASCII码表中32到126的范围内,即只包括可以正常显示的字符和空格。
搜索时必须完全一样才能认为字符串存在。
例如,要搜索abc,文件中出现ab
c或者ab
c等等都不代表abc存在。
2、程序说明
可以写成两个程序来完成任务,即“预处理程序”和“主程序”。“预处理程序”不能读取target文件,“主程序”可以读取所有的文件。即“预处理程序”不知道要搜索的是哪些字符串,只能从要搜索的文件中提取可用信息。“预处理程序”可以把获得的有用信息写到一些临时文件中,之后“主程序”再从中读取并利用。最后由“主程序”的运行时间来给分,“预处理程序”的时间不能超过一个小时。“预处理程序”的运行时间到达1个小时的时候会被强行终止。“预处理程序”并不是必要的,可以不写“预处理程序”,只写“主程序”。
程序运行过程中对于给出的txt文件(filename.txt,target.txt,要搜索的文件)只许读,不允许写和更改,如果试图写入或更改这些txt文件,程序会崩掉。
程序运行过程中如果需要建立一些临时文件,请在文件名中加入学号,这样做是为了防止不同的同学用了同样的文件名导致冲突。在程序运行完毕后请删掉临时文件,只保留output.txt文件。
3、测试方法
附件中已上传测试程序,测试方法如下。
3
将“预处理程序”的exe文件命名为
“pre学号.exe”,将“主程序”的exe文件命名为
“学号.exe”。把两个exe文件,大作业测试.bat和所有要读取的txt文件放到一个文件夹下。双击大作业测试.bat即可。
例如,学号为2008011101,则两个exe文件分别为“pre2008011101.exe”,和“2008011101.exe”。双击大作业测试.bat后,屏幕上会显示运行时间的记录,同时会生成一个“时间记录.txt”的文档。里面内容如下:
当前运行:2008011101
预处理程序
start:
13:43:14.73
end:
13:43:14.77
主程序
start:
13:43:27.33
end:
13:43:27.35
程序结束后,程序产生的output.txt会被测试程序改成“学号output.txt”,即会出现2008011101output.txt这个文件。输出文件名一定要写成output.txt。
测试程序在运行“预处理程序”时会对target.txt文件做处理,如果“预处理程序”试图读取target.txt文件中的内容,程序会崩掉。在运行“主程序”时不会有这种问题。
在最后测试时会先用一组中小规模的数据进行测试,判断程序是否能正常运行,结果正确后才进行大规模数据测试。因此,程序应能够合理地判断和处理不同规模的数据。
最后测试的大数据大致有100到1000个文件,总大小为几个G,不会超过10G。
4、测试环境
大作业的程序会在系服务器上运行。系服务器上只有VS2010,大作业只能使用VS2010,只能使用C或C++。使用其它软件的同学可以在写好程序后借用其他同学的VS2010生成出工程,并将VS2010里的.exe文件按照要求复制出来。
程序中只能使用4G的内存,内存超出后程序会崩掉。
系服务器的处理器型号:Intel(R)
Xeon(R) CPU E7- 8850 @
2.00GHz
5、格式要求
大作业按如下格式提交:
文件夹
---说明文档
---pre学号.exe(预处理程序的.exe文件)
---学号.exe(主程序的.exe文件)
---preSRC(预处理程序的c、cpp和.h文件)
---SRC(主程序的c、cpp和.h文件)
4
例如:
工程文件不必提交。如果没有预处理程序,不用提交preSRC文件夹和
pre学号.exe。
说明文档要尽可能写的详细,包括具体的算法设计,程序中内存的使用情况等内容。没有说明文档或者说明文档过于简单都会扣分。
请严格按照格式要求提交,以免影响大作业成绩。
6、评分标准
大作业的评分标准暂定如下:对于结果正确的大作业程序,按“主程序”的运行时间排序,最快的得到120分,第2名118分,每往后1名减掉2分。结果错误或程序崩掉将得不到分数。
截止日期之后,迟交1天扣10%,程序有错误或无法运行会打回,之后还可以提交,但每提交一次扣15%
以下几种情况都会造成程序崩溃:
(1)
预处理程序读取了target.txt文件
(2) 程序试图写入或修改
target.txt、filename.txt、要搜索的文件。
(3)
程序的内存使用超过了4个G。
(4)
使用了VS2010以外的软件生成的.exe文件
请大家务必注意。
7、提示
1、debug和release
VS的程序有debug和release两种模式。通常默认是debug模式,这种情况可以对程序进行调试。release模式中无法调试程序,VS会对release模式的程序做优化,release模式会比debug模式要快。release模式对于程序的要求更严格,一些在debug模式中可以使用的程序可能在release程序中无法运行。提交release版本的exe文件可以达到更快的运行速度。
2、关于预处理程序
由于预处理程序达到1个小时后会被强行中断,然后开始运行主程序,因此不建议让主程序过分依赖预处理程序,建议在程序中加入一些判断机制,例如可以在文件中记录些数据表示预处理程序运行到了哪一步,主程序根据预处理程序是否运行完成、运行到了哪一步合理提取相关信息继续工作。
3、大数据的情况
建议各位同学在自己的电脑上试着生成几个G的大数据来测试自己的程序,很多程序在处理小数据时没有问题,数据量一旦增大程序很可能会无法运行。
4、确保程序运行完后能直接退出
不要在程序中加入system("pause")等语句,程序应该能够在不加入任何键盘操作的情况下正常运行并退出。
最后祝大家顺利完成大作业。
原文地址:http://www.cnblogs.com/oversea201405/p/3760698.html