第一届CCF真题+部分答案10版.docx
- 文档编号:27151041
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:53
- 大小:62.21KB
第一届CCF真题+部分答案10版.docx
《第一届CCF真题+部分答案10版.docx》由会员分享,可在线阅读,更多相关《第一届CCF真题+部分答案10版.docx(53页珍藏版)》请在冰豆网上搜索。
第一届CCF真题+部分答案10版
目前CCF一共搞了4届,这不是一个比赛,就是类似于4/6级那种性质,一共5题,每题满分100分,据了解,基本上对了1题就能拿到证,证上会有你的分数和排名,能考高分的尽量考高分,就像英语6级,430分和600多分,虽然都是发张纸给你,但还是有区别的,第一题都比较简单,大家尽量把第一题拿下,提交代码不会返回对错给你,以你最后一次提交为你的答案,结束后再打分,也就是说,你的代码可能有点小错误,但也许能得个60分,80分这样,大概就是这样=.=
第一届CCF第一题
201403-1
试题名称:
相反数
时间限制:
1.0s
内存限制:
256.0MB
问题描述:
问题描述
有N个非零且各不相同的整数。
请你编一个程序求出它们中有多少对相反数(a和-a为一对相反数)。
输入格式
第一行包含一个正整数N。
(1≤N≤500)。
第二行为N个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
输出格式
只输出一个整数,即这N个数中包含多少对相反数。
样例输入
5
123-1-2
样例输出
2
#include
#include
#include
#include
#include
#defineLLlonglong
usingnamespacestd;
intmain()
{
//freopen("in.txt","r",stdin);
intn;
inta[520];
scanf("%d",&n);
inti,j;
intsum=0;
for(i=0;i scanf("%d",&a[i]); for(i=0;i for(j=0;j { if(i==j) continue; if(a[i]==-a[j]) sum++; } printf("%d\n",sum/2); return0; } 第一届CCF第二题 试题名称: 窗口 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在某图形操作系统中,有N个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。 窗口的边界上的点也属于该窗口。 窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。 当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。 如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。 现在我们希望你写一个程序模拟点击窗口的过程。 输入格式 输入的第一行有两个正整数,即N和M。 (1≤N≤10,1≤M≤10) 接下来N行按照从最下层到最顶层的顺序给出N个窗口的位置。 每行包含四个非负整数x1,y1,x2,y2,表示该窗口的一对顶点坐标分别为(x1,y1)和(x2,y2)。 保证x1 接下来M行每行包含两个非负整数x,y,表示一次鼠标点击的坐标。 题目中涉及到的所有点和矩形的顶点的x,y坐标分别不超过2559和 1439。 输出格式 输出包括M行,每一行表示一次鼠标点击的结果。 如果该次鼠标点击选择了一个窗口,则输出这个窗口的编号(窗口按照输入中的顺序从1编号到N);如果没有,则输出"IGNORED"(不含双引号)。 样例输入 34 0044 1155 2266 11 00 44 05 样例输出 2 1 1 IGNORED 样例说明 第一次点击的位置同时属于第1和第2个窗口,但是由于第2个窗口在上面,它被选择并且被置于顶层。 第二次点击的位置只属于第1个窗口,因此该次点击选择了此窗口并将其置于顶层。 现在的三个窗口的层次关系与初始状态恰好相反了。 第三次点击的位置同时属于三个窗口的范围,但是由于现在第1个窗口处于顶层,它被选择。 最后点击的(0,5)不属于任何窗口。 #include #include #include #include #include #defineLLlonglong usingnamespacestd; structwindow { intx1; inty1; intx2; inty2; intid; }w[12]; intmain() { //freopen("in.txt","r",stdin); intn,m; scanf("%d%d",&n,&m); inti,j; for(i=1;i<=n;i++) { scanf("%d%d%d%d",&w[i].x1,&w[i].y1,&w[i].x2,&w[i].y2); w[i].id=i; } intx,y,num; while(m--) { scanf("%d%d",&x,&y); for(i=n;i>=1;i--) { if(x>=w[i].x1&&x<=w[i].x2&&y>=w[i].y1&&y<=w[i].y2) { num=w[i].id; windowtemp=w[i]; for(intk=i;k<=n;k++) w[k]=w[k+1]; w[n]=temp; break; } } if(i! =0) printf("%d\n",num); else printf("IGNORED\n"); } return0; } 第一届CCF第三题 201403-3 试题名称: 命令行选项 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。 每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。 这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。 在工具名字之后可能会包含若干选项,然后可能会包含一些不是选项的参数。 选项有两类: 带参数的选项和不带参数的选项。 一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"-a"或"-b"。 而带参数选项则由两个由空格分隔的字符串构成,前者的格式要求与无参数选项相同,后者则是该选项的参数,是由小写字母,数字和减号组成的非空字符串。 该命令行工具的作者提供给你一个格式字符串以指定他的命令行工具需要接受哪些选项。 这个字符串由若干小写字母和冒号组成,其中的每个小写字母表示一个该程序接受的选项。 如果该小写字母后面紧跟了一个冒号,它就表示一个带参数的选项,否则则为不带参数的选项。 例如,"ab: m: "表示该程序接受三种选项,即"-a"(不带参数),"-b"(带参数),以及"-m"(带参数)。 命令行工具的作者准备了若干条命令行用以测试你的程序。 对于每个命令行,你的工具应当一直向后分析。 当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。 命令行剩余的未分析部分不构成该命令的选项,因此你的程序应当忽略它们。 输入格式 输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过52。 格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。 输入的第二行是一个正整数N(1≤N≤20),表示你需要处理的命令行的个数。 接下来有N行,每行是一个待处理的命令行,它包括不超过256个字符。 该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。 输出格式 输出有N行。 其中第i行以"Casei: "开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。 如果一个选项在命令行中出现了多次,只输出一次。 如果一个带参数的选项在命令行中出现了多次,只输出最后一次出现时所带的参数。 样例输入 albw: x 4 ls-a-l-adocuments-b ls ls-w10-x-w15 ls-a-b-c-d-e-l 样例输出 Case1: -a-l Case2: Case3: -w15-x Case4: -a-b 第一届CCF第四题 201403-4 试题名称: 无线网络 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 目前在一个很大的平面房间里有n个无线路由器,每个无线路由器都固定在某个点上。 任何两个无线路由器只要距离不超过r就能互相建立网络连接。 除此以外,另有m个可以摆放无线路由器的位置。 你可以在这些位置中选择至多k个增设新的路由器。 你的目标是使得第1个路由器和第2个路由器之间的网络连接经过尽量少的中转路由器。 请问在最优方案下中转路由器的最少个数是多少? 输入格式 第一行包含四个正整数n,m,k,r。 (2≤n≤100,1≤k≤m≤100,1≤r≤108)。 接下来n行,每行包含两个整数xi 和yi,表示一个已经放置好的无线路由器在(xi,yi)点处。 输入数据保证第1和第2个路由器在仅有这n个路由器的情况下已经可以互相连接(经过一系列的中转路由器)。 接下来m行,每行包含两个整数xi 和yi,表示(xi,yi)点处可以增设一个路由器。 输入中所有的坐标的绝对值不超过108,保证输入中的坐标各不相同。 输出格式 输出只有一个数,即在指定的位置中增设k个路由器后,从第1个路由器到第2个路由器最少经过的中转路由器的个数。 样例输入 5313 00 55 03 05 35 33 44 30 样例输出 2 第一届CCF第五题 201403-5 试题名称: 任务调度 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 有若干个任务需要在一台机器上运行。 它们之间没有依赖关系,因此可以被按照任意顺序执行。 该机器有两个CPU和一个GPU。 对于每个任务,你可以为它分配不同的硬件资源: 1.在单个CPU上运行。 2.在两个CPU上同时运行。 3.在单个CPU和GPU上同时运行。 4.在两个CPU和GPU上同时运行。 一个任务开始执行以后,将会独占它所用到的所有硬件资源,不得中断,直到执行结束为止。 第i个任务用单个CPU,两个CPU,单个CPU加GPU,两个CPU加GPU运行所消耗的时间分别为ai,bi,ci 和di。 现在需要你计算出至少需要花多少时间可以把所有给定的任务完成。 输入格式 输入的第一行只有一个正整数n(1≤n≤40),是总共需要执行的任务个数。 接下来的n行每行有四个正整数ai,bi,ci,di(ai,bi,ci,di 均不超过10),以空格隔开。 输出格式 输出只有一个整数,即完成给定的所有任务所需的最少时间。 样例输入 3 4422 7474 3333 样例输出 7 样例说明 有很多种调度方案可以在7个时间单位里完成给定的三个任务,以下是其中的一种方案: 同时运行第一个任务(单CPU加上GPU)和第三个任务(单CPU),它们分别在时刻2和时刻3完成。 在时刻3开始双CPU运行任务2,在时刻7完成。 第二届CCF第一题 201409-1 试题名称: 相邻数对 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。 输入格式 输入的第一行包含一个整数n,表示给定整数的个数。 第二行包含所给定的n个整数。 输出格式 输出一个整数,表示值正好相差1的数对的个数。 样例输入 6 1026378 样例输出 3 样例说明 值正好相差1的数对包括(2,3),(6,7),(7,8)。 评测用例规模与约定 1<=n<=1000,给定的整数为不超过10000的非负整数。 #include #include #include #include #include #defineLLlonglong usingnamespacestd; inta[1010]; intmain() { //freopen("in.txt","r",stdin); intn; scanf("%d",&n); inti,j; intsum=0; for(i=0;i { scanf("%d",&a[i]); } sort(a,a+n); for(i=0;i { if(a[i+1]-a[i]! =1) continue; else sum++; } printf("%d\n",sum); return0; } 第二届CCF第二题 201409-2 试题名称: 画图 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。 下图给出了一个画了两个矩形的例子。 第一个矩形是(1,1)到(4,4),用绿色和紫色表示。 第二个矩形是(2,3)到(6,5),用蓝色和紫色表示。 图中,一共有15个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。 在实际的涂色过程中,所有的矩形都涂成统一的颜色,图中显示不同颜色仅为说明方便。 给出所有要画的矩形,请问总共有多少个单位的面积被涂上颜色。 输入格式 输入的第一行包含一个整数n,表示要画的矩形的个数。 接下来n行,每行4个非负整数,分别表示要画的矩形的左下角的横坐标与纵坐标,以及右上角的横坐标与纵坐标。 输出格式 输出一个整数,表示有多少个单位的面积被涂上颜色。 样例输入 2 1144 2365 样例输出 15 评测用例规模与约定 1<=n<=100,0<=横坐标、纵坐标<=100。 #include #include #include #include #include #defineLLlonglong usingnamespacestd; inta[110][110]; intmain() { //freopen("in.txt","r",stdin); intn; scanf("%d",&n); inti,j; intx1,y1,x2,y2; intsum=0; while(n--) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); for(i=x1+1;i<=x2;i++) for(j=y1+1;j<=y2;j++) a[i][j]=1; } for(i=1;i<=105;i++) for(j=1;j<=105;j++) sum+=a[i][j]; printf("%d\n",sum); return0; } 第二届CCF第三题(KMP) 201409-3 试题名称: 字符串匹配 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。 你的程序还需支持大小写敏感选项: 当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。 输入格式 输入的第一行包含一个字符串S,由大小写英文字母组成。 第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。 第三行包含一个整数n,表示给出的文字的行数。 接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。 输出格式 输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。 样例输入 Hello 1 5 HelloWorld HiHiHelloHiHi GrepIsAGreatTool HELLO HELLOisNOTHello 样例输出 HelloWorld HiHiHelloHiHi HELLOisNOTHello 样例说明 在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。 如果将输入的第二行改为0,则第四个字符串应该输出。 评测用例规模与约定 1<=n<=100,每个字符串的长度不超过100。 #include #include #include #include #include #defineLLlonglong usingnamespacestd; constintN=110; intnext[N]; charS[N],T[N],S1[N]; intslen,tlen; voidgetNext() { intj,k; j=0;k=-1;next[0]=-1; while(j if(k==-1||T[j]==T[k]) next[++j]=++k; else k=next[k]; } intKMP_Count() { intans=0; inti,j=0; if(slen==1&&tlen==1) { if(S[0]==T[0]) return1; else return0; } getNext(); for(i=0;i { while(j>0&&S[i]! =T[j]) j=next[j]; if(S[i]==T[j]) j++; if(j==tlen) { ans++; j=next[j]; } } returnans; } intmain() { //freopen("in.txt","r",stdin); intn,sum,tag; inti; cin>>T; tlen=strlen(T); cin>>tag>>n; if(tag==1) { while(n--) { cin>>S; slen=strlen(S); sum=KMP_Count(); if(sum>=1) cout< } } else { for(i=0;i T[i]=tolower(T[i]); while(n--) { cin>>S1; slen=strlen(S1); for(i=0;i S[i]=tolower(S1[i]); sum=KMP_Count(); if(sum>=1) cout< } } return0; } 第二届CCF第四题(bfs) 201409-4 试题名称: 最优配餐 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务。 随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。 方格图中的线表示可以行走的道路,相邻两个格点的距离为1。 栋栋要送餐必须走可以行走的道路,而且不能经过红色标注的点。 送餐的主要成本体现在路上所花的时间,每一份餐每走一个单位的距离需要花费1块钱。 每个客户的需求都可以由栋栋的任意分店配送,每个分店没有配送总量的限制。 现在你得到了栋栋的客户的需求,请问在最优的送餐方式下,送这些餐需要花费多大的成本。 输入格式 输入的第一行包含四个整数n,m,k,d,分别表示方格图的大小、栋栋的分店数量、客户的数量,以及不能经过的点的数量。 接下来m行,每行两个整数xi,yi,表示栋栋的一个分店在方格图中的横坐标和纵坐标。 接下来k行,每行三个整数xi,yi,ci,分别表示每个客户在方格图中的横坐标、纵坐标和订餐的量。 (注意,可能有多个客户在方格图中的同一个位置) 接下来d行,每行两个整数,分别表示每个不能经过的点的横坐标和纵坐标。 输出格式 输出一个整数,表示最优送餐方式下所需要花费的成本。 样例输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一 CCF 部分 答案 10