NOIP普及组复赛试题源程序

合集下载

NOIP2011普及组复赛(精彩试题+源程序)

NOIP2011普及组复赛(精彩试题+源程序)

NOIP2011 普及组复赛1.数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。

新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。

(参见样例2)【输入】输入文件名为reverse.in。

输入共一行,一个整数N。

【输出】输出文件名为reverse.out。

输出共1行,一个整数,表示反转后的新数。

-1,000,000,000≤N≤1,000,000,000。

【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。

【法一】字符串处理Var i,l,k:integer;s:string;p:boolean;beginassign(input, 'reverse.in'); reset(input);assign(output, 'reverse.out'); rewrite(output);readln(s);l:=length(s);k:=1;if s[1]='-' thenbeginwrite('-');k:=2;end;p:=true;;for i:=l downto k dobeginif(p)and((s[i]='0')) then continueelsebeginwrite(s[i]);p:=false;;end;end;close(input); close(output);end.【法二】数字处理Var f:integer;n,ans:longint;beginassign(input, 'reverse.in'); reset(input);assign(output, 'reverse.out'); rewrite(output);readln(n);if n<0 thenbeginf:=-1;n:=-n;endelsef:=1;ans:=0;while n<>0 dobeginans:=ans*10+n mod 10;n:=n div 10;end;ans:=ans*f;writeln(ans);close(input); close(output);end.2.统计单词数(stat.pas/c/cpp)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

noip普及组复赛试题及答案

noip普及组复赛试题及答案

noip普及组复赛试题及答案一、选择题1. 在计算机科学中,以下哪个概念与数据结构最相关?A. 算法B. 操作系统C. 网络协议D. 编译原理答案:A2. 以下哪种排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 堆排序D. 冒泡排序答案:D3. 在C++中,以下哪个关键字用于定义类?A. structB. unionC. enumD. typedef答案:A4. 以下哪个选项不是数据库管理系统(DBMS)的特性?A. 数据持久性B. 数据共享C. 数据加密D. 数据独立性答案:C5. 在计算机网络中,TCP和UDP协议分别属于哪一层?A. 传输层B. 应用层C. 网络层D. 物理层答案:A二、填空题1. 在计算机程序中,______ 用于定义数据的存储方式和组织形式。

答案:数据结构2. 一个算法的时间复杂度为O(1),表示该算法的执行时间与输入数据的规模______。

答案:无关3. 在C++中,______ 是一种特殊的类,它提供了一种方式来定义数据类型。

答案:typedef4. 数据库管理系统(DBMS)通常包含数据定义语言(DDL)、数据操纵语言(DML)和______。

答案:数据控制语言(DCL)5. 在计算机网络中,______ 协议负责在网络层进行数据包的路由选择。

答案:IP三、简答题1. 请简述面向对象编程(OOP)的三个基本特征。

答案:封装、继承、多态2. 描述二分查找算法的基本步骤。

答案:二分查找算法的基本步骤包括:首先确定数组是有序的,然后取中间元素与目标值比较,如果中间元素等于目标值,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找,直到找到目标值或查找范围为空。

四、编程题1. 编写一个函数,实现对整数数组的排序。

答案:以下是一个简单的冒泡排序算法实现:```cppvoid bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {swap(arr[j], arr[j+1]);}}}}```2. 编写一个函数,实现计算一个整数的阶乘。

少儿编程NOIP2019年普及组复赛试题

少儿编程NOIP2019年普及组复赛试题

2019 年CCF 非专业级软件能力认证第二轮入门级2019 CCF CSP-J2时间:2019 年11 月16 日14:30 - 18:00二.提交源程序文件名注意事项:1.文件名(程序名和输入输出文件名)必须使用英文小写。

2.C/C++ 中函数main() 的返回值类型必须是int,程序正常结束时的返回值必须是0。

3.提交的程序代码文件的放置位置请参照各省的具体要求。

4.因违反以上三点而出现的错误或问题,申诉时一律不予受理。

5.程序可使用的栈内存空间限制与题目的内存限制一致。

6.全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz,内存32GB。

上述时限以此配置为准。

7.只提供Linux 格式附加样例文件。

8.评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。

9.最终评测时所用的编译命令中不含任何优化开关。

数字游戏(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 的个数。

见选手目录下的number/number1.in 和number/number1.ans。

【输入输出样例1 说明】该01 字符串中有 2 个字符1。

见选手目录下的number/number2.in 和number/number2.ans。

【输入输出样例2 说明】该01 字符串中有8 个字符1。

【输入输出样例3】见选手目录下的number/number3.in 和number/number3.ans。

最新NOIP复赛普及组试题资料

最新NOIP复赛普及组试题资料

全国信息学奥林匹克联赛(NOIP2011)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)四.运行内存限制注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。

2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。

3、全国统一评测时采用的机器配置为:CPU P4 3.0GHz,内存1G,上述时限以此配置为准。

4、特别提醒:评测在NOI Linux 下进行。

1.数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。

新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

【输入】输入文件名为reverse.in。

输入共1 行,一个整数N。

【输出】输出文件名为reverse.out。

输出共1 行,一个整数,表示反转后的新数。

【输入输出样例1】【输入输出样例2】【数据范围】-1,000,000,000 ≤ N ≤ 1,000,000,000。

2.统计单词数(stat.cpp/c/pas)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。

注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。

【输入】输入文件名为stat.in,2 行。

第1 行为一个字符串,其中只含字母,表示给定单词;第2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

【输出】输出文件名为stat.out。

NOIP第十三届天下青少年信息学奥林匹克联赛复赛试题普及组

NOIP第十三届天下青少年信息学奥林匹克联赛复赛试题普及组

全国信息学奥林匹克联赛(NOIP2007 )复赛普及组全国信息学奥林匹克联赛(NOIP 2007)复赛普及组题目一览题目名称奖学金纪念品分组守望者的逃离Hanoi 双塔问题代号scholar group escape hanoi 输入文件输出文件时限 1 秒 1 秒 1 秒 1 秒(2007 年 11 月 17 日 3 小时达成 )说明:1.文件名(程序名和输入输出文件名)一定使用小写2. C/C++ 中函数 main() 的返回值种类一定是int ,程序正常结束时的返回值一定是0。

3. 全国一致评测时采纳的机器参照配置为:CPU 2.0GHz ,内存 256M 。

1.奖学金(scholar.pas/c/cpp)【问题描绘】某小学近来获取了一笔资助,打算取出此中一部分为学习成绩优异的前 5 名学生发奖学金。

期末,每个学生都有 3 门课的成绩:语文、数学、英语。

先按总分从高到低排序,假如两个同学总分同样,再按语文成绩从高到低排序,假如两个同学总分和语文成绩都同样,那么规定学号小的同学排在前方,这样,每个学生的排序是独一确立的。

任务:先依据输入的 3 门课的成绩计算总分,而后按上述规则排序,最后按排名次序输出前5 名学生的学号和总分。

注意,在前 5 名同学中,每一个人的奖学金都不同样,所以,你一定严格按上述规则排序。

比如,在某个正确答案中,假如前两行的输出数据(每行输出两个数:学号、总分)是:7 2795 279这两行数据的含义是:总分最高的两个同学的学号挨次是7 号、 5 号。

这两名同学的总分都是 279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7 的学生语文成绩更高一些。

假如你的前两名的输出数据是:5 2797 279则按输犯错误办理,不可以得分。

【输入】输入文件包含n+1行:第 1 行为一个正整数n,表示该校参加评比的学生人数。

第 2 到 n+1 行,每行有 3 个用空格分开的数字,每个数字都在0 到 100 之间。

noip普及组复赛入门测试(答案+测试数据)

noip普及组复赛入门测试(答案+测试数据)

一、新龟兔赛跑(文件名xgtsp.pas)新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。

由于兔子的坏习惯,它总喜欢把比赛的总时间T小时中的K小时拿来睡觉。

现在给你比赛的总时间T、兔子的睡觉时间K、兔子的速度U、乌龟的速度V,需要你求出该次比赛谁最后获胜。

输入第一行为一个整数X,表示有X组输入数据。

每组数据只有一行,包括4个数T、K、U、V (1 ≤ T≤ 300,0 ≤ K ≤ T,1 ≤ U ≤ 100,1 ≤ V ≤ 100)。

对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。

允许输入一组数后立即输出对应的结果。

样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*t>U*(t-k) then writeln(1);if v*t<U*(t-k) then writeln(-1);if v*t=U*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:XQLC.PAS )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,……。

每次弹起的高度都是上一次高度的一半。

求小球第N次反弹起的高度和球在整个过程所经过的路程(包括下落和反弹),用键盘输入N,输出反弹高度和经过路程,结果保留两位小数。

NOIP2012普及组复赛试题及解答

NOIP2012普及组复赛试题及解答
第 5 页 共 10页
全国信息学奥林匹克联赛(NOIP2012)复赛 试题及解答
普及组
start--; do{ start++; start%=m; //start是刚进入第i+1层时的房间号 if (a[i][start][0]==1) //此房间有楼梯 { k--; } } while (k!=0); //k!=0表示尚未找到牌号所指示的房间 } fprintf(outputfp,"%d\n",temp); } fclose(inputfp); fclose(outputfp); return 0; }
第 3 页 共 10页
全国信息学奥林匹克联赛(NOIP2012)复赛 试题及解答
普及组
2.寻宝
(treasure.cpp/c/pas) 传说很遥远的藏宝楼顶层藏着诱人的宝藏。 小明历尽千辛万苦终于找到传说中的这个藏 宝楼,藏宝楼的门 口竖着一个木板,上面写有几个大字:寻宝说明书。说明书的内容如下: 藏宝楼共有 N+1 层, 最上面一层是顶层, 顶层有一个房间里面藏着宝藏。 除了顶层外,藏宝楼另有 N 层, 每层 M 个房间, 这 M 个房间围成一圈并按逆时针方向依次编号为 0, …, M-1。其中一些房间有通往上一层的 楼梯,每层楼的楼梯设计可能不同。每个房间里有一个 指示牌,指示牌上有一个数字 x,表示从这个房间开始 按逆时针方向选择第 x 个有楼梯的房 间(假定该房间的编号为 k) ,从该房间上楼,上楼后到达上一层的 k 号 房间。比如当前房 间的指示牌上写着 2, 则按逆时针方向开始尝试, 找到第 2 个有楼梯的房间, 从该房间上楼。 如果当前房间本身就有楼梯通向上层,该房间作为第一个有楼梯的房间。 寻宝说明书的最后用红色大号字体写着: “寻宝须知:帮助你找到每层上楼房间的指示 牌上的数字(即每 层第一个进入的房间内指示牌上的数字)总和为打开宝箱的密钥” 。 请帮助小明算出这个打开宝箱的密钥。 【输入】 输入文件为 treasure.in 第一行 2 个整数 N 和 M,之间用一个空格隔开。N 表示除了顶层外藏宝楼共 N 层楼, M 表示除顶层外每层楼有 M 个房间。 接下来 N*M 行,每行两个整数,之间用一个空格隔开,每行描述一个房间内的情况, 其中第(i-1)*M+j 行表示第 i 层 j-1 号房间的情况(i=1, 2, …, N;j=1, 2, … ,M) 。第一个整数 表示该房间是否有楼梯通往上一层 (0 表示没有,1 表示有) ,第二个整数表示指示牌上的数 字。注意,从 j 号房间的楼梯爬到上一层到达的房间 一定也是 j 号房间。 最后一行,一个整数,表示小明从藏宝楼底层的几号房间进入开始寻宝(注:房间编号 从 0 开始) 。 【输出】 输出文件名为 treasure.out。 输出只有一行,一个整数,表示打开宝箱的密钥,这个数可能会很大,请输 出对 20123 取模的结果即可。 【输入输出样例】 treasure.in 2 3 1 2 0 3 1 4 0 1 1 5 1 2 1

NOIP2010普及组复赛试题

NOIP2010普及组复赛试题

全国信息学奥林匹克联赛(NOIP2010)复赛普及组(请选手务必仔细阅读本页内容)一.题目概览中文题目名称数字统计接水问题导弹拦截三国游戏英文题目名称two water missile sanguo可执行文件名two water missile sanguo 输入文件名two.in water.in missile.in sanguo.in 输出文件名two.out water.out missile.out sanguo.out每个测试点时限1秒1秒1秒1秒测试点数目10 10 10 10每个测试点分值10 10 10 10 比较方式全文比较(过滤行末空格及文末回车)题目类型传统传统传统传统二.提交源程序文件名对于pascal语言two.pas water.pas missile.pas sanguo.pas 对于C语言two.c water.c missilel.c sanguo.c 对于C++语言two.cpp water.cpp missile.cpp sanguo.cpp三.编译命令(不包含任何优化开关)对于pascal语言fpc two.pas fpc water.pas fpc missile.pas fpc sanguo.pas对于C语言gcc –o twoTwo.c -lm gcc –o waterwater.c -lmgcc –o missileball.c -lmgcc –o sanguosanguo.c -lm对于C++语言g++ –o twotwo.cpp -lmg++ –o seatwater.cpp -lmg++ –o missilemissile.cpp -lmg++ –o sanguosanguo.cpp -lm四.运行内存限制运行内存上限128M 128M 128M 128M注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。

2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。

noip2021普及组复赛题解

noip2021普及组复赛题解

1. 珠心算考试注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同的)数之和。

如此的题意加上100的规模,建议暴力3个for:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>usingnamespacestd;intn;inta[105];intmain(){freopen("","r",stdin);freopen("","w",stdout);scanf("%d",&n);for(inti=1;i<=n;i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);intres=0;for(inti=1;i<=n;i++){intok=0;for(intj=1;j<=n&&!ok;j++)if(j!=i){for(intk=1;k<=n&&!ok;k++)if(a[k]!=a[j]){if(a[j]+a[k]==a[i])ok=1;}res+=ok;}printf("%d\n",res);return0;}2. 比例简化L很小,仍是列举,然后比较的话建议用乘法比较,幸免精度问题: #include<cstdio>#include<cstring>#include<iostream>usingnamespacestd;intA,B,L;intgcd(inta,intb){if(b==0)returna;returngcd(b,a%b);}intmain(){freopen("","r",stdin);freopen("","w",stdout);scanf("%d%d%d",&A,&B,&L);intba=1000000,bb=1;for(inti=1;i<=L;i++){for(intj=1;j<=L;j++){if(gcd(i,j)==1&&i*B>=j*A){if(ba*j>=bb*i){ba=i,bb=j;}}}}printf("%d%d\n",ba,bb);return0;}3. 螺旋矩阵没一圈的数量有规律的,最外面一圈(n-1)*4,然后每往里n-2,直到后要么只有一个点,要么4个点。

noip复赛普及组试题

noip复赛普及组试题

CCF 全国信息学奥林匹克联赛〔NOIP2021 〕复赛普及组〔请选手务必仔细阅读本页内容〕一.题目大要中文题目名称金币扫雷游戏求和销售员英文题目与子目录名coin mine sum salesman 可执行文件名coin mine sum salesman 输入文件名输出文件名每个测试点时限 1 秒 1 秒 1 秒 1 秒测试点数量10101010每个测试点分值10101010附加样例文件有有有有结果比较方式全文比较〔过滤行末空格及文末回车〕题目种类传统传统传统传统运行内存上限128M128M128M128M 二.提交源程前言件名对于 C++语言对于C语言对于 pascal语言三.编译命令〔不包括任何优化开关〕对于 C++语言g++ -o coin -g++ -o mine -g++ -o sum -g++ -o salesmanlm lm lm-lm 对于C语言gcc -o coin gcc -o mine gcc -o sum gcc -o salesman-lm-lm-lm-lm对于 pascal语言fpc fpc fpc fpc 本卷须知:1、文件名〔程序名和输入输出文件名〕必定使用英文小写。

2、 C/C++中函数 main()的返回值种类必定是int,程序正常结束时的返回值必定是3、全国一致评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor4G,上述时限以此配置为准。

0 。

,,内存4、只供应 Linux格式附加样例文件。

5、特别提示:评测在当前最新宣告的NOI Linux下进行,各语言的编译器版本以其为准。

1.金币c/pas)国王将金作工,放忠的士。

第一天,士收到一枚金;此后两天〔第二天和第三天〕,每天收到两枚金;此后三天〔第四、五、六天〕,每天收到三枚金;此后四天〔第七、八、九、十天〕,每天收到四枚金⋯⋯;种工放模式会素来延下去:当 N 天每天收到 N 枚金后,士会在此后的 N+1 天里,每天收到 N+1 枚金。

noip2008普及组复赛试题(附题解)

noip2008普及组复赛试题(附题解)

全国信息学奥林匹克联赛(NOIP2008)复赛普及组注意事项:1、文件名(程序名和输入输出文件名)必须使用小写。

2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。

3、全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。

各省在自测时可根据具体配置调整时限。

1.ISBN号码(isbn.pas/c/cpp)【问题描述】每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。

ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。

识别码的计算方法如下:首位数字乘以1加上次位数字乘以2......以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。

例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2, (9)再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。

你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。

【输入】输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。

【输出】输出文件isbn.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。

NOIP2004普及组复赛试题

NOIP2004普及组复赛试题

我们假定多多在每个单位时间内,可以做下列四件事情中的一件:
1)
从路边跳到最靠近路边(即第一行)的某棵花生植株;
2)
从一棵植株跳到前后左右与之相邻的另一棵植株;
3)
采摘一棵植株下的花生;
4)
从最靠近路边(即第一行)的某棵花生植株跳回路边。
现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花 生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。
【样例输入】
53
62
72
53
54
04
06
【样例输出】
3
2、花生采摘(peanuts.pas/c/cpp)
【问题描述】
鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间 小路散步,突然发现路边 的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花 生田,花生植株整齐地排列成矩形网格(如图 1)。有经验的多多一眼就能看出,每棵花生 植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株, 去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生 ;依此类推,不过 你一定要在我限定的时间内回到路边。”
5 3 1 23 45 【样例输出】
1 24 53 【数据规模】 对于 30%的数据,N<=15; 对于 60%的数据,N<=50; 对于全部的数据,N<=10000;
例如在图 2 所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数分 别为 13, 7, 15, 9。沿着图示的路线,多多在 21 个单位时间内,最多可以采到 37 个花生。

NOIP2012普及组复赛试题

NOIP2012普及组复赛试题

CCF全国信息学奥林匹克联赛(NOIP2012)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)四.运行内存限制注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。

2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。

3、全国统一评测时采用的机器配置为:CPU Intel Core2 Quad Q8200 2.33GHz,内存2G,上述时限以此配置为准。

4、特别提醒:评测在NOI Linux下进行。

1.质因数分解(prime.cpp/c/pas)【问题描述】已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。

【输入】输入文件名为prime.in。

输入只有一行,包含一个正整数n。

【输出】输出文件名为prime.out。

输出只有一行,包含一个正整数p,即较大的那个质数。

【输入输出样例】【数据范围】对于60%的数据,6 ≤ n ≤ 1000。

对于100%的数据,6 ≤ n ≤ 2*109。

2.寻宝(treasure.cpp/c/pas)【问题描述】传说很遥远的藏宝楼顶层藏着诱人的宝藏。

小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书。

说明书的内容如下:藏宝楼共有N+1 层,最上面一层是顶层,顶层有一个房间里面藏着宝藏。

除了顶层外,藏宝楼另有N 层,每层M 个房间,这M 个房间围成一圈并按逆时针方向依次编号为0,…,M-1。

其中一些房间有通往上一层的楼梯,每层楼的楼梯设计可能不同。

每个房间里有一个指示牌,指示牌上有一个数字x,表示从这个房间开始按逆时针方向选择第x 个有楼梯的房间(假定该房间的编号为k),从该房间上楼,上楼后到达上一层的k 号房间。

比如当前房间的指示牌上写着2,则按逆时针方向开始尝试,找到第 2 个有楼梯的房间,从该房间上楼。

如果当前房间本身就有楼梯通向上层,该房间作为第一个有楼梯的房间。

学科竞赛-NOIP2005普及组复赛试题(附题解)

学科竞赛-NOIP2005普及组复赛试题(附题解)

NOIP2005普及组复赛试题(附题解)noip2005普及组解题报告陶陶摘苹果【文件名】: apple.pas/c/cpp【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。

苹果成熟的时候,陶陶就会跑去摘苹果。

陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。

假设她碰到苹果,苹果就会掉下来。

【输入文件】输入文件apple.in包括两行数据。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

【输出文件】输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

【样例输入】100 200 150 140 129 134 167 198 200 111110【样例输出】5分析:拿到这道题,我觉得还是比较简单的。

由于数据范围都不超过200,用integer完全就足够了,具体步骤如下:1.读入2.循环1 to 103.判断,找出最优解4.输出【程序清单】program apple;vari,n,s:integer;a:array[1..10] of integer;beginassign(input,'apple.in');reset(input);for i:=1 to 10 do read(a[i]);read(n);s:=0;for i:=1 to 10 doif n+30>=a[i] then s:=s+1;close(input);assign(output,'apple.out');rewrite(output);write(s);close(output);end.校门外的树【文件名】tree.pas/c/cpp【问题描述】某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。

noip复赛普及组试题

noip复赛普及组试题

CCF 全国信息学奥林匹克联赛(NOIP2015)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况1、文件名(程序名和输入输出文件名)必须使用英文小写。

2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。

3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,,内存4G,上述时限以此配置为准。

4、只提供 Linux 格式附加样例文件。

5、特别提醒:评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。

1. 金币c/pas)国王将金币作为工资,发放给忠诚的骑士。

第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 N 天每天收到 N 枚金币后,骑士会在之后的连续 N+1 天里,每天收到 N+1 枚金币。

请计算在前 K 天里,骑士一共获得了多少金币。

【输入格式】输入文件名为。

输入文件只有 1 行,包含一个正整数 K,表示发放金币的天数。

【输出格式】输出文件名为。

输出文件只有 1 行,包含一个正整数,即骑士收到的金币数。

【输入输出样例 1】【输入输出样例 1 说明】骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。

因此一共收到 1+2+2+3+3+3=14 枚金币。

【输入输出样例 2】【数据说明】对于 100%的数据,1 ≤ K ≤ 10,000。

2.扫雷游戏(c/pas)扫雷游戏是一款十分经典的单机小游戏。

在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。

玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。

noip2021普及组复赛题解

noip2021普及组复赛题解

1.珠心算考试注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同的)数之和。

如此的题意加上100的规模,建议暴力3个for:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int n;int a[105];int main(){freopen("","r",stdin);freopen("","w",stdout);scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);int res=0;for(int i=1; i<=n; i++){int ok=0;for(int j=1; j<=n && !ok; j++) if(j!=i){for(int k=1; k<=n && !ok; k++) if(a[k]!=a[j]){if(a[j]+a[k]==a[i]) ok=1;}}res+=ok;}printf("%d\n",res);return 0;}2.比例简化L很小,仍是列举,然后比较的话建议用乘法比较,幸免精度问题:#include<cstdio>#include<cstring>#include<iostream>using namespace std;int A,B,L;int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);}int main(){freopen("","r",stdin);freopen("","w",stdout);scanf("%d%d%d",&A,&B,&L);int ba=1000000,bb=1;for(int i=1; i<=L; i++){for(int j=1; j<=L; j++){if(gcd(i,j)==1 && i*B>=j*A){if(ba*j>=bb*i){ba=i, bb=j;}}}}printf("%d %d\n",ba,bb);return 0;}3.螺旋矩阵没一圈的数量有规律的,最外面一圈(n-1)*4,然后每往里n-2,直到后要么只有一个点,要么4个点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

N O I P2011普及组复赛1.数字反转(c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。

新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。

(参见样例2)【输入】输入文件名为。

输入共一行,一个整数N。

【输出】输出文件名为。

输出共1行,一个整数,表示反转后的新数。

-1,000,000,000≤N≤1,000,000,000。

【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。

【法一】字符串处理Var i,l,k:integer;s:string;p:boolean;beginassign(input, ''); reset(input);assign(output, ''); rewrite(output);readln(s);l:=length(s);k:=1;if s[1]='-' thenbeginwrite('-');k:=2;end;p:=true;;for i:=l downto k dobeginif(p)and((s[i]='0')) then continueelsebeginwrite(s[i]);p:=false;;end;end;close(input); close(output);end.【法二】数字处理Var f:integer;n,ans:longint;beginassign(input, ''); reset(input);assign(output, ''); rewrite(output);readln(n);if n<0 thenbeginf:=-1;n:=-n;endelsef:=1;ans:=0;while n<>0 dobeginans:=ans*10+n mod 10;n:=n div 10;end;ans:=ans*f;writeln(ans);close(input); close(output);end.2.统计单词数c/cpp)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。

注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)【输入】输入文件名为,2 行。

第 1 行为一个字符串,其中只含字母,表示给定单词;第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

【输出】输出文件名为。

只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。

输出结果表示给定的单词To 在文章中出现两次,第一次出现的位置为0。

表示给定的单词to 在文章中没有出现,输出整数-1。

【数据范围】1≤单词长度≤10。

1≤文章长度≤1,000,000。

【解题】这道题也不是很难,program stat;var I,n,p:longint;s,s1:string;c:char;beginassign(input,''); reset(input);assign(output,''); rewrite(output);readln(s);s:=upcase(s); 3.瑞士轮c/pas)【背景】在双人对决的竞技性比赛,如乒乓球、羽毛球、国际象棋中,最常见的赛制是淘汰赛和循环赛。

前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高。

后者的特点是较为公平,偶然性较低,但比赛过程往往十分冗长。

本题中介绍的瑞士轮赛制,因最早使用于 1895 年在瑞士举办的国际象棋比赛而得名。

它可以看作是淘汰赛与循环赛的折衷,既保证了比赛的稳定性,又能使赛程不至于过长。

【问题描述】2*N 名编号为1~2N 的选手共进行R 轮比赛。

每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名。

选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和。

总分相同的,约定编号较小的选手排名靠前。

每轮比赛的对阵安排与该轮比赛开始前的排名有关:第 1 名和第2 名、第3 名和第4名、……、第2K–1 名和第2K 名、……、第 2N–1 名和第2N 名,各进行一场比赛。

每场比赛胜者得1 分,负者得0 分。

也就是说除了首轮以外,其它轮比赛的安排均不能事先确定,而是要取决于选手在之前比赛中的表现。

现给定每个选手的初始分数及其实力值,试计算在 R 轮比赛过后,排名第Q 的选手编号是多少。

我们假设选手的实力值两两不同,且每场比赛中实力值较高的总能获胜。

【输入】输入文件名为。

输入的第一行是三个正整数N、R、Q,每两个数之间用一个空格隔开,表示有2*N 名选手、R 轮比赛,以及我们关心的名次Q。

第二行是2*N 个非负整数s1, s2, …, s2N,每两个数之间用一个空格隔开,其中s i 表示编号为i 的选手的初始分数。

第三行是2*N 个正整数w1, w2, …, w2N,每两个数之间用一个空格隔开,其中w i 表示编号为i 的选手的实力值。

【输出】输出文件名为。

输出只有一行,包含一个整数,即R 轮比赛结束后,排名第Q 的选手的编号。

对于30%的数据,1≤N≤100;对于50%的数据,1≤N≤10,000;10,1≤对于100%的数据,1≤N≤100,000,1≤R≤50,1≤Q≤2N,0≤s1, s2, …, s2N ≤810。

w1,w2, …, w2N ≤8【解题】题目虽然长,但理解题意后就发现解题的瓶颈在于排序。

如果每一轮比赛的结果都进行快速排序,时间复杂度为O(Rlongn),但事实证明这样只能拿60分。

如何AC,这需要一个巧算法:分析得知,快速排序实际上进行了许多无用的工作:如果两个人在第i轮都赢了,那么第i轮后的先后关系与第i-1轮是一样的;反之,如果两人都输了,他们的先后关系也不会变。

所以,我们有一个新算法:一开始做一趟快速排序,然后对于每一轮,将此轮的n个赢者(他们的先后关系和上一轮不变)和n个输者(他们的先后关系和上一轮也不变分开,然后就是归并,于是时间复杂度O(Rn))(实践证明,如果单纯的排序r次,必然结果是超时。

事实上只需一次真正意义上的排序以后,在以后的比赛中,按原顺序分成两组,获胜组和失败组,这两组依然是有序的,再把这两组归并成一组,就可以了。

总时间复杂度O(N*R) )program swiss;var a,b,v:array[1..200000]of longint;c,d:array[1..100000,1..2]of longint;n,r,q,i,j:longint;procedure qsort(l,r:longint);var i,j,mid1,mid2,t:longint;begini:=l;j:=r; mid1:=a[(l+r)div 2]; mid2:=v[(l+r)div 2];repeat 4.表达式的值c/pas)【问题描述】1. 先计算括号内的,再计算括号外的。

2. “×”运算优先于“⊕”运算,即计算表达式时,先计算×运算,再计算⊕运算。

例如:计算表达式A⊕B × C 时,先计算B × C,其结果再与A 做⊕运算。

现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字0 或者1,请问有多少种填法可以使得表达式的值为0。

【输入】输入文件名为,共2 行。

第 1 行为一个整数L,表示给定的表达式中除去横线外的运算符和括号的个数。

第 2 行为一个字符串包含L 个字符,其中只包含’(’、’)’、’+’、’*’这4 种字符,其中’(’、’)’是左右括号,’+’、’*’分别表示前面定义的运算符“⊕”和“×”。

这行字符按顺序给出了给定表达式中除去变量外的运算符和括号。

【输出】输出文件共1 行。

包含一个整数,即所有的方案数。

注意:这个数可能会很大,请输出方案数对10007 取模后的结果。

给定的表达式包括横线字符之后为:_+(_*_)在横线位置填入(0、0、0)、(0、1、0)、(0、0、1)时,表达式的值均为0,所以共有3种填法。

【数据范围】对于20%的数据有0≤L≤10。

对于50%的数据有0≤L≤1,000。

对于70%的数据有0≤L≤10,000。

对于100%的数据有0≤L≤100,000。

对于50%的数据输入表达式中不含括号。

【解题】算法类似于表达式计算,一个符号栈,两个数据栈。

记f(s,0)表示表达式s为0的方案数,f(s,1)表示表达式s为1的方案数。

f(a+b,0) = f(a,0)*f(b,0)f(a+b,1) = f(a,0)*f(b,0)+f(a,0)*f(b,1)+f(a,1)*f(b,0)f(a*b,0)=f(a,0)*f(b,0) + f(a,1)*f(b,0) + f(a,0)*f(b,1)f(a*b,1) = f(a,1) * f(b,1)program exp;const maxn= 100010;op:array[1..4] of char = ('(','+','*',')');flag:array[1..4,1..4] of char = ( { ( } ('<','<','<','='),{ + } ('<','>','<','>'),{ * } ('<','>','>','>'),{ ) } ('>','>','>','>') ); maxn] of char;stack_data0, stack_data1:array[1..maxn] of longint;n,top_op, top_data, i, len:longint;a0, a1, b0, b1, t0, t1:longint;s:ansistring;ch,now:char;procedure push_op(ch:char);。

相关文档
最新文档