NOIP2011普及组
信息学奥赛NOIP普及组历届试题分析

二、模拟类试题
有些问题,我们很难建立数学模型,或者很难 用计算机建立递推、递归、枚举、回溯法等算 法。在这种情况下,一般采用模拟策略。
所谓模拟策略就是模拟某个过程,通过改变数 学模型的各种参数,进而观察变更这些参数所 引起过程状态的变化,由此展开算法设计。
金币 (noip2015普及组第一题)
输入样例:
70 3 71 100
69 1 12
输出样例:
3
(1 <= T <= 1000) (1 <= M <= 100)
采药 (noip2005普及组第三题)
题目大意:共m株草药,每株草药有一个价值 和采摘的时间,问t时间能采摘到的草药的最大 价值。
采药 (noip2005普及组第三题)
输入格式:
第一行有两个整数T和M,T代表总共能够用来采药的时间,M 代表山洞里的草药的数目。接下来的M行每行包括两个在1到 100之间(包括1和100)的整数,分别表示采摘某株草药的时 间和这株草药的价值。
输出格式:
一行只包含一个整数,表示在规定的时间内,可以采到的草药 的最大总价值。
螺旋方阵试题分析
本题首先让我们想到传统的模拟,从[1,1]开 始往数组中填充数字,但对于[30000,30000] 的数组,直接爆零。
对于读入的n, x, y,先判断(x,y)在第几圈, 再模拟圈内的数字。
螺旋方阵试题分析
如:n=4, (2,2)在第2圈,(3,1)在第1圈。 n=6,(4,5)在第2圈
移动;如果前方是未曾经过的格子,则继续前进, 否则右转;重复上述操作直至经过矩阵中所有格子。 根据经过顺序,在格子中依次填入1,2,3,....,便构 成了一个螺旋矩阵。 现给出矩阵大小n以及i和j,请你求出该矩阵中第 i行第j列的数是多少。 下图是一个n=4时的螺旋矩阵。
2011年潍坊市青少年信息学奥林匹克竞赛试题(普及组)

2011年潍坊市青少年信息学奥林匹克竞赛试题(普及组)备注:.pas/c/cpp表达的是:当使用Pascal语言编程,则源程序后缀名为.pas;C语言编程,则后缀名为.c;C++语言编程,则后缀名为.cpp。
考试注意事项:答题时间为3小时。
本试卷共4题,每题分值100分,总分400分。
各列最大值(num.pas/c/cpp)【问题描述】给定一个M行N列(1≤M,N≤100)的数组,数组内数字全部是整形,均≤1000,编程求出每列的最大值,并且输出每列最大值的和。
【输入文件】num.inM+1行,第一行是M N,中间空格隔开;第二行至M行是M行N列的数组。
【输出文件】num.out1行,N+1个数,前N个数分别为各列的最大值,第N+1个数是最大值的和。
各数用空格隔开。
【样例输入】3 21 22 33 4【样例输出】3 4 7阶乘精确值(jqz.pas/c/cpp)【问题描述】输入一个不超过1000的正整数n,输出n!=1×2×3×…×n的精确结果。
【输入文件】jqz.in一个整数,n。
【输出文件】jqz.out一个数,为输出的精确结果值。
【样例输入】30【样例输出】265252859812191058636308480000000蛇形排数(snake.pas/c/cpp)【问题描述】同学A遇到一个难题,要求是输入一个整数N,输出一个N行N列的方阵,方阵为蛇形数字组合。
他想请你帮忙解决一下这个难题。
【输入文件】snake.in一个整数,N。
(2≤N≤20)【输出文件】snake.outN行N列,为输出的蛇形数字组合。
各数字域宽为4。
【样例输入】4【样例输出】10 11 12 19 16 13 28 15 14 37 6 5 4战争通讯(war.pas/c/cpp)【问题描述】在未来的某次战争中,我军计划了一次军事行动,目的是劫持敌人的航母。
计划中要将数百条机器蛇投放到航母的各个角落里。
NOIP普及组历届试题分析

对于100%的数据,3 ≤ n ≤ 100 测验题给出的正整数大小不超过10,000。
试题分析
题意大意:给你n个数,在这n个数中,找 到满足A+B=C的C的个数,注意不是这个 等式的个数。
样例中,1,2,3,4有1+2=3,1+3=4两个。
由于本题数据规模n<=100,我们可以直接
枚举C, A, B,三层循环解决问题。
扫雷游戏 (noip2015普及组第二题)
输入样例 1 33 *?? ??? ?*? 输入样例 2 23 ?*? *??
输出样例 1 mine.out *10 221 1*1 输出样例 2 mine.out 2*1 *21
对于 100%的数据,1≤n≤100,1≤m≤100
问题分析:
本题也是简单的枚举类试题。 我们从雷区的第一行第一列(1,1)开始,判断它周围 有多少个地雷。 由于本题读入的是字符,读入时需要注意: readln(n,m); for i=1 to n do begin for j=1 to m do read(a[i][j]); readln; end;
比例简化 (noip2014普及组第二题)
在社交媒体上,经常会看到针对某一个观点同意与 否的民意调查以及结果。例如,对某 一观点表示 支持的有 1498 人,反对的有 902 人,那么赞同与 反对的比例可以简单的记为1498:902。 不过,如果把调查结果就以这种方式呈现出来,大 多数人肯定不会满意。因为这个比例的数值太大, 难以一眼看出它们的关系。对于上面这个例子,如 果把比例记为 5:3,虽然与 真实结果有一定的误差, 但依然能够较为准确地反映调查结果,同时也显得 比较直观。 现给出支持人数 A,反对人数 B,以及一个上限 L, 请你将 A 比 B 化简为 A’比 B’,要求在 A’和 B’均 不大于 L 且 A’和 B’互质(两个整数的最大公约数 是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值 尽可能小。
noip211初赛普及组c++题目及答案

N O I P2011第十七届信息学奥林匹克竞赛初赛(普及组C++语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确选项。
)1.在二进制下,1011001+()=1100110。
A.1011B.1101 C.1010D.11112.字符“0”的ASCII码为48,则字符“9”的ASCII码为()。
A.39B.57 C.120D.视具体的计算机而定3.一片容量为8G的SD卡能储存大约()张大小为2MB的数码照片。
A.1600B.2000 C.4000D.160004.摩尔定律(Moore'slaw)是由英特尔创始人之一戈登·摩尔(GordonMoor)提出来的。
根据摩尔定律,在过去几十年一级在可预测的未来纪念,单块集成电驴的集成度大约每()个月翻一番。
A.1B.6C.18D.365.无向完全图是图中每对顶点之间都恰好有一条边的简单图。
已知无向完全图G有7个顶点,则它共有()条边。
A.7B.21 C.42D.496.寄存器是()的重要组成部分。
A.硬盘B.高速缓存C.内存D.中央处理器(CPU)7.如果根结点的深度记为1,则一棵恰有2011个叶结点的二叉树的深度最少是()。
A.10B.11 C.12D.138.体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。
每个同学按顺序来到操场时,都从排尾走到排头,找到第一个比自己高的同学,并站在他的后面。
这种站队的方法类似于()算法。
A.快速排序B.插入排序C.冒泡排序D.归并排序9.一个正整数在二进制下有100位,则它在十六进制下有()位。
A.7B.13 C.25D.不能确定10.有人认为,在个人电脑送修前,将文件放入回收站中就是已经将其删除了。
这种想法是()。
A.正确的,将文件放入回收站以为着彻底删除、无法恢复B.不正确的,只有将回收站清空后,才意味着彻底删除、无法恢复C.不正确的,即使回收站清空,文件只是被标记为删除,仍可能通过回复软件找回D.不正确的,只要在硬盘上出现过的文件,永远不可能被彻底删除11.广度优先搜索时,需要用到的数据结构是()。
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)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
CSP-J (NOIP普及组) 复赛2010-2023考查内容一览表

CSP-J (NOIP提高组) 复赛2010-2020考查内容NOIP2017提高组T4奶酪深搜、广搜、并查集T5宝藏状压DPT6列队线段树NOIP2016提高组T1玩具谜题模拟T2天天爱跑步倍增LCAT3换教室动态规划(高级)T4组合数问题前缀和、杨辉三角T5蚯蚓队列、单调性T6愤怒的小鸟状压DPNOIP2015提高组T1神奇的幻方模拟T2信息传递并查集T3斗地主动态规划(高级)、深搜T4跳石头二分T5子串滚动数组、动态规划(高级) T6运输计划二分、LCA、非递归NOIP2014提高组T1生活大爆炸版石头剪刀布模拟T2联合权值动态规划(高级)、前缀和T3飞扬的小鸟动态规划(高级)T4无线网络发射器选址枚举T5寻找道路最短路T6解方程数论、枚举NOIP2013提高组T1转圈游戏快速幂T2火柴排队归并排序、逆序对T3货车运输最小生成树、LCA、倍增T4积木大赛贪心T5花匠贪心T6华容道广搜、剪枝NOIP2012提高组T1Vigenere密码枚举、模拟T2国王游戏贪心、高精度T3开车旅行平衡树、倍增T4同余方程扩展欧几里得T5借教室线段树T6疫情控制二分、倍增NOIP2011提高组T1铺地毯模拟T2选择客栈动态规划(高级)、RMQ T3Mayan游戏T4计算系数组合数学T5聪明的质监员二分T6观光公交贪心NOIP2010提高组T1机器翻译队列T2乌龟棋动态规划T3关押罪犯二分、并查集T4引水入城广搜、动态规划T3摆渡车动态规划(高级) T4对称二叉树二叉树NOIP2017普及组序号题名考查内容T1成绩顺序结构T2图书管理员结构体排序T3棋盘深搜、剪枝T4跳*房*子二分、动态规划NOIP2016普及组序号题名考查内容T1买铅笔一重循环T2回文日期回文T3海港大模拟、队列T4魔*法*阵枚举、前缀和NOIP2015普及组序号题名考查内容T1金*币一重循环T2扫*雷*游*戏二维数组T3求和组合数学T4推销员贪心、优先队列NOIP2014普及组序号题名考查内容T1珠心算测验模拟T2比例简化枚举、gcdT3螺旋矩阵模拟、找规律T4子矩阵动态规划(高级)NOIP2013普及组序号题名考查内容T1记数问题二重循环T2表达式求值栈T3小朋友的数字动态规划(高级) T4车站分级拓扑排序NOIP2012普及组序号题名考查内容T1质因数分解一重循环、质数T2寻*宝模拟、取模T3摆花背包、动态规划T4文化之旅最短路NOIP2011普及组序号题名考查内容T1数字反转进制转换T2统计单词数字符串T3瑞士轮归并排序T4表达式的值动态规划(高级)、栈NOIP2010普及组序号题名考查内容T1数字统计二维数组T2接水问题模拟T3导*弹*拦*截贪心T4三*国*游*戏贪心、博弈。
最新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。
P1308[NOIP2011普及组]统计单词数
![P1308[NOIP2011普及组]统计单词数](https://img.taocdn.com/s3/m/aed5c42fae45b307e87101f69e3143323968f59d.png)
P1308[NOIP2011普及组]统计单词数⼀、知识点整理1、字符串转⼩写//转为⼩写transform(a.begin(), a.end(), a.begin(), ::tolower);for (int i = 0; i < b.size(); i++) if (b[i] >= 'A' && b[i] <= 'Z') b[i] += 32;2、读⼊带空格的字符串//读⼊⼀⾏数据之前,如果有输⼊,要getchar();getchar();//读⼊b字符串getline(cin, b);3、查找⼦串string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回⼀个特别的标记npos。
(返回值可以看成是⼀个int型的数)string s("1a2b3c4d5e6f7jkg8h9i1a2b3c4d5e6f7g8ha9i");string flag;string::size_type position = s.find("jk");//find 函数返回jk 在s 中的下标位置, 如果没找到,返回⼀个特别的标志c++中⽤npos表⽰,我这⾥npos取值是4294967295,if (position != string::npos)printf("position is : %d\n" ,position);elseprintf("Not found the flag\n");4、⾸次位置,最后⼀次位置flag = "c";position = s.find_first_of(flag);printf("s.find_first_of(flag) is :%d\n",position);position = s.find_last_of(flag);printf("s.find_last_of(flag) is :%d\n",position);5、查找某⼀给定位置后的⼦串的位置//从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标position=s.find("b",5);cout<<"s.find(b,5) is : "<<position<<endl;6、查找所有⼦串在母串中出现的位置flag="a";position=0;int i=1;while((position=s.find(flag,position))!=string::npos){cout<<"position "<<i<<" : "<<position<<endl;position++;i++;}⼆、实现代码#include <bits/stdc++.h>using namespace std;int pos = -1;int cnt;string a, b;int main() {cin >> a;//转为⼩写transform(a.begin(), a.end(), a.begin(), ::tolower);//扩展为左右加空格a = ' ' + a + ' ';//读⼊⼀⾏数据之前,如果有输⼊,要getchar();getchar();//读⼊b字符串getline(cin, b);//左右加空格b = ' ' + b + ' ';//转为⼩写transform(b.begin(), b.end(), b.begin(), ::tolower);//在b中查找aint p = 0;while ((p = b.find(a, p)) != string::npos) {cnt++;if (cnt == 1) pos = p;p++;}if (cnt > 0) printf("%d %d\n", cnt, pos);else printf("%d", -1);Processing math: 100%return 0; }。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字反转题目描述
给定一个整数,请将该数各个位上数字反转得到一个新数。
新数也应满足整数的常见形
式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
【数据范围】
-1,000,000,000 ≤ N≤ 1,000,000,000。
输入格式
输入共 1 行,一个整数N。
输出格式
输出共 1 行,一个整数,表示反转后的新数。
样例输入:
123
-380
样例输出:
321
-83
统计单词数题目描述
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位
置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章
中出现的次数和第一次出现的位置。
注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。
【数据范围】
1 ≤ 单词长度≤ 10。
1 ≤ 文章长度≤ 1,000,000。
【输入输出样例 1 说明】
输出结果表示给定的单词To 在文章中出现两次,第一次出现的位置为0。
【输入输出样例 2 说明】
表示给定的单词to 在文章中没有出现,输出整数-1。
输入格式
第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,
分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字
母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。
样例输入:
[sample 1]
To
to be or not to be is a question
[sample 2]
to
Did the Ottoman Empire lose its power at that time
样例输出:
[sample 1]
2 0
[sample 2]
-1
瑞士轮题目描述
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,每两个数之间用一个空格隔开,其中si表示编号为i 的选手的初始分数。
第三行是2*N个正整数w1,w2,…,w2N,每两个数之间用一个空格隔开,其中wi表示编号为i
的选手的实力值。
输出格式
输出只有一行,包含一个整数,即R轮比赛结束后,排名第Q的选手的编号。
样例输入
2 4 2
7 6 6 7
10 5 20 15
样例输出
1
对于 1 位二进制变量定义两种运算:
运算符运算规则
⊕
0⊕0=0
0⊕1=1
1⊕0=1
1⊕1=1
×
0 × 0=0
0 × 1=0
1 × 0=0
1 × 1=1
运算的优先级是:
1. 先计算括号内的,再计算括号外的。
2. “×”运算优先于“⊕”运算,即计算表达式时,先计算×运算,再计算⊕运算。
例如:计算表达式A⊕B × C 时,先计算B × C,其结果再与A 做⊕运算。
现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字0 或者1,请问
有多少种填法可以使得表达式的值为0。
【输入输出样例说明】
给定的表达式包括横线字符之后为:_+(_*_)
在横线位置填入(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%的数据输入表达式中不含括号。
输入格式
第 1 行为一个整数L,表示给定的表达式中除去横线外的运算符和括号的个数。
第 2 行为一个字符串包含L 个字符,其中只包含'('、')'、'+'、'*'这4 种字符,其中' ('、')'是左右括号,'+'、'*'分别表示前面定义的运算符“⊕”和“×”。
这行字符按顺序
给出了给定表达式中除去变量外的运算符和括号。
输出格式
包含一个整数,即所有的方案数。
注意:这个数可能会很大,
请输出方案数对10007 取模后的结果。
样例输入
4
+(*)
样例输出
3。