第1页共10页2019年CCF非专业级软件能力认证第二轮入门级2019CCFCSP-J2时间:2019年11月16日14:30-18:00一.题目概况中文题目名称数字游戏交通换乘纪念品零件加工英文题目与子目录名numbertransfersouvenirwork可执行文件名numbertransfersouvenirwork输入文件名number.intransfer.insouvenir.inwork.in输出文件名number.outtransfer.outsouvenir.outwork.out每个测试点时限1秒1秒1秒1秒测试点数目20202020每个测试点分值5555附加样例文件有有有有结果比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统传统运行内存上限256M256M256M256M二.提交源程序文件名对于C++语言number.cpptransfer.cppsouvenir.cppwork.cpp对于C语言number.ctransfer.csouvenir.cwork.c对于pascal语言number.pastransfer.passouvenir.paswork.pas三.编译命令(不包含任何优化开关)C++语言g++-onumbernumber.cpp-lmg++-otransfertransfer.cpp-lmg++-osouvenirsouvenir.cpp-lmg++-oworkwork.cpp-lmC语言gcc-onumbernumber.c-lmgcc-otransfertransfer.c-lmgcc-osouvenirsouvenir.c-lmgcc-oworkwork.c-lmPascal语言fpcnumber.pasfpctransfer.pasfpcsouvenir.pasfpcwork.pas注意事项:1.文件名(程序名和输入输出文件名)必须使用英文小写。2.C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。3.提交的程序代码文件的放置位置请参照各省的具体要求。4.因违反以上三点而出现的错误或问题,申诉时一律不予受理。第2页共10页5.程序可使用的栈内存空间限制与题目的内存限制一致。6.全国统一评测时采用的机器配置为:Intel(R)Core(TM)i7-8700KCPU@3.70GHz,内存32GB。上述时限以此配置为准。7.只提供Linux格式附加样例文件。8.评测在当前最新公布的NOILinux下进行,各语言的编译器版本以其为准。9.最终评测时所用的编译命令中不含任何优化开关。第3页共10页数字游戏(number.cpp/c/pas)【问题描述】小K同学向小P同学发送了一个长度为8的01字符串来玩数字游戏,小P同学想要知道字符串中究竟有多少个1。注意:01字符串为每一个字符是0或者1的字符串,如“101”(不含双引号)为一个长度为3的01字符串。【输入格式】输入文件名为number.in。输入文件只有一行,一个长度为8的01字符串s。【输出格式】输出文件名为number.out。输出文件只有一行,包含一个整数,即01字符串中字符1的个数。【输入输出样例1】number.innumber.out000101002见选手目录下的number/number1.in和number/number1.ans。【输入输出样例1说明】该01字符串中有2个字符1。【输入输出样例2】title.intitle.out111111118见选手目录下的number/number2.in和number/number2.ans。【输入输出样例2说明】该01字符串中有8个字符1。【输入输出样例3】见选手目录下的number/number3.in和number/number3.ans。【数据规模与约定】对于20%的数据,保证输入的字符全部为0。对于100%的数据,输入只可能包含字符0和字符1,字符串长度固定为8。第4页共10页公交换乘(transfer.cpp/c/pas)【问题描述】著名旅游城市B市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案:1.在搭乘一次地铁后可以获得一张优惠票,有效期为45分钟,在有效期内可以消耗这张优惠票,免费搭乘一次票价不超过地铁票价的公交车。在有效期内指开始乘公交车的时间与开始乘地铁的时间之差小于等于45分钟,即:𝑡𝑏𝑢𝑠−𝑡𝑠𝑢𝑏𝑤𝑎𝑦≤452.搭乘地铁获得的优惠票可以累积,即可以连续搭乘若干次地铁后再连续使用优惠票搭乘公交车。3.搭乘公交车时,如果可以使用优惠票一定会使用优惠票;如果有多张优惠票满足条件,则优先消耗获得最早的优惠票。现在你得到了小轩最近的公共交通出行记录,你能帮他算算他的花费吗?【输入格式】输入文件名为transfer.in。输入文件的第一行包含一个正整数𝑛,代表乘车记录的数量。接下来的𝑛行,每行包含3个整数,相邻两数之间以一个空格分隔。第𝑖行的第1个整数代表第𝑖条记录乘坐的交通工具,0代表地铁,1代表公交车;第2个整数代表第𝑖条记录乘车的票价𝑝𝑟𝑖𝑐𝑒𝑖;第三个整数代表第𝑖条记录开始乘车的时间𝑡𝑖(距0时刻的分钟数)。我们保证出行记录是按照开始乘车的时间顺序给出的,且不会有两次乘车记录出现在同一分钟。【输出格式】输出文件名为transfer.out。输出文件有一行,包含一个正整数,代表小轩出行的总花费【输入输出样例1】transfer.intransfer.out601031546012501396051101613536见选手目录下的transfer/transfer1.in和transfer/transfer1.ans。【输入输出样例1说明】第一条记录,在第3分钟花费10元乘坐地铁。第二条记录,在第46分钟乘坐公交车,可以使用第一条记录中乘坐地铁获得的优惠票,因此没有花费。第5页共10页第三条记录,在第50分种花费12元乘坐地铁。第四条记录,在第96分钟乘坐公交车,由于距离第三条记录中乘坐地铁已超过45分钟,所以优惠票已失效,花费3元乘坐公交车。第五条记录,在第110分钟花费5元乘坐地铁。第六条记录,在第135分钟乘坐公交车,由于此时手中只有第五条记录中乘坐地铁获得的优惠票有效,而本次公交车的票价为6元,高于第五条记录中地铁的票价5元,所以不能使用优惠票,花费6元乘坐公交车。总共花费36元。【输入输出样例2】transfer.intransfer.out6051020160723118311438176832见选手目录下的transfer/transfer2.in和transfer/transfer2.ans。【输入输出样例2说明】第一条记录,在第1分钟花费5元乘坐地铁。第二条记录,在第16分钟花费20元乘坐地铁。第三条记录,在第23分钟花费7元乘坐地铁。第四条记录,在第31分钟乘坐公交车,此时只有第二条记录中乘坐的地铁票价高于本次公交车票价,所以使用第二条记录中乘坐地铁获得的优惠票。第五条记录,在第38分钟乘坐公交车,此时第一条和第三条记录中乘坐地铁获得的优惠票都可以使用,使用获得最早的优惠票,即第一条记录中乘坐地铁获得的优惠票。第六条记录,在第68分钟乘坐公交车,使用第三条记录中乘坐地铁获得的优惠票。总共花费32元。【输入输出样例3】见选手目录下的transfer/transfer3.in和transfer/transfer3.ans。【数据规模与约定】对于30%的数据,𝑛≤1,000,𝑡𝑖≤106。另有15%的数据,𝑡𝑖≤107,𝑝𝑟𝑖𝑐𝑒𝑖都相等。另有15%的数据,𝑡𝑖≤109,𝑝𝑟𝑖𝑐𝑒𝑖都相等。对于100%的数据,𝑛≤105,𝑡𝑖≤109,1≤𝑝𝑟𝑖𝑐𝑒𝑖≤1,000。第6页共10页纪念品(souvenir.cpp/c/pas)【问题描述】小伟突然获得一种超能力,他知道未来T天N种纪念品每天的价格。某个纪念品的价格是指购买一个该纪念品所需的金币数量,以及卖出一个该纪念品换回的金币数量。每天,小伟可以进行以下两种交易无限次:1.任选一个纪念品,若手上有足够金币,以当日价格购买该纪念品;2.卖出持有的任意一个纪念品,以当日价格换回金币。每天卖出纪念品换回的金币可以立即用于购买纪念品,当日购买的纪念品也可以当日卖出换回金币。当然,一直持有纪念品也是可以的。T天之后,小伟的超能力消失。因此他一定会在第T天卖出所有纪念品换回金币。小伟现在有M枚金币,他想要在超能力消失后拥有尽可能多的金币。【输入格式】输入文件名为souvenir.in。第一行包含三个正整数T,N,M,相邻两数之间以一个空格分开,分别代表未来天数T,纪念品数量N,小伟现在拥有的金币数量M。接下来T行,每行包含N个正整数,相邻两数之间以一个空格分隔。第𝑖行的N个正整数分别为P𝑖,1,P𝑖,2,……,P𝑖,𝑁,其中P𝑖,𝑗表示第𝑖天第𝑗种纪念品的价格。【输出格式】输出文件名为souvenir.out。输出仅一行,包含一个正整数,表示小伟在超能力消失后最多能拥有的金币数量。【输入输出样例1】souvenir.insouvenir.out61100502025202550305见选手目录下的souvenir/souvenir1.in和souvenir/souvenir1.ans。【输入输出样例1说明】最佳策略是:第二天花光所有100枚金币买入5个纪念品1;第三天卖出5个纪念品1,获得金币125枚;第四天买入6个纪念品1,剩余5枚金币;第六天必须卖出所有纪念品换回300枚金币,第四天剩余5枚金币,共305枚金币。超能力消失后,小伟最多拥有305枚金币。【输入输出样例2】第7页共10页souvenir.insouvenir.out33100102015151713152516217见选手目录下的souvenir/souvenir2.in和souvenir/souvenir2.ans。【输入输出样例2说明】最佳策略是:第一天花光所有金币买入10个纪念品1;第二天卖出全部纪念品1得到150枚金币并买入8个纪念品2和1个纪念品3,剩余1枚金币;第三天必须卖出所有纪念品换回216枚金币,第二天剩余1枚金币,共217枚金币。超能力消失后,小伟最多拥有217枚金币。【输入输出样例3】见选手目录下的souvenir/souvenir3.in和souvenir/souvenir3.ans。【数据规模与约定】对于10%的数据,𝑇=1。对于30%的数据,𝑇≤4,𝑁≤4,𝑀≤100,所有价格10≤P𝑖,𝑗≤100。另有15%的数据,𝑇≤100,𝑁=1。另有15%的数据,T=2,N≤100。对于100%的数据,𝑇≤100,𝑁≤100,𝑀≤103,所有价格1≤P𝑖,𝑗≤104,数据保证任意时刻,小明手上的金币数不可能超过104。第8页共10页加工零件(work.cpp/c/pas)【问题描述】凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇。工厂里有𝑛位工人,工人们从1∼𝑛编号。某些工人之间存在双向的零件传送带。保证每两名工人之间最多只存在一条传送带。如果𝑥号工人想生产一个被加工到第𝐿(𝐿1)阶段的零件,则所有与𝑥号工人有传送带直接相连的工人,都需要生产一个被加工到第𝐿−1阶段的零件(但𝑥号工人自己无需生产第𝐿−1阶段的零件)。如果𝑥号工人想生产一个被加工到第1阶段的零件,则所有与𝑥号工人有传送带直接相连的工人,都需要为𝑥号工人提供一个原材料。轩轩是1号工人。现在给出𝑞张工单,第𝑖张工单表示编号为𝑎𝑖的工人想生产一个第𝐿𝑖阶段的零件。轩轩想知道对于每张工单,他是否需要给别人提供原材料。他知道聪明的你一定可以帮他计算出来!【输入格式】输入文件名为work.in。第一行两个正整数𝑛,𝑚和𝑞,分别表示工人的数目、传送带的数