信息学奥赛NOIP普及组历届试题分析
信息学奥赛NOIP普及组历届试题分析
![信息学奥赛NOIP普及组历届试题分析](https://img.taocdn.com/s3/m/9f88b248f12d2af90242e6b8.png)
二、模拟类试题
有些问题,我们很难建立数学模型,或者很难 用计算机建立递推、递归、枚举、回溯法等算 法。在这种情况下,一般采用模拟策略。
所谓模拟策略就是模拟某个过程,通过改变数 学模型的各种参数,进而观察变更这些参数所 引起过程状态的变化,由此展开算法设计。
金币 (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时的螺旋矩阵。
NOIP普及组初赛历年试题及答案阅读题篇
![NOIP普及组初赛历年试题及答案阅读题篇](https://img.taocdn.com/s3/m/dfcab817ba1aa8114431d93e.png)
NOIP普及组初赛历年试题及答案阅读题篇阅读程序写结果(共4 题,每题8 分,共计32 分)阅读程序题是得分的关键,因为不是让你上机去运行程序,所以要一步步地读程序,记录相关变量值的变化情况。
因为程序的运行结果只有输出语句才有输出,所以只写出输出语句的结果。
有时要找出规律才能写出结果,特别是循环次数多的情况,另外要注意边界值,不能多算一步也不能少算一步。
解决这类问题的关键在于能够分析程序的结构以及程序段的功能。
常见的有列表法、画流程图法等。
完成这类题目的方法和步骤如下:1、从头到尾通读程序,大致把握程序的算法、找出这个题目的即这个程序想干什么。
抓住了它,不仅得出答案变得较容易,而且对自己的结果也会比较有信心。
2、通过给程序分段、理清程序的结构和层次,达到读懂程序的目的。
3、阅读程序中特别注意跟踪主要变量的值的变化,可以用列表的方法,了解变量变化和程序的运行结果,注意发现规律。
所谓列表法,就是将各变量名作为表头,在程序的执行过程中,将各变量值的变化记录在相应变量的下方。
4、按照程序中输出格式的要求,写出运行结果,并带着结果回到程序进行检查。
在阅读程序时,要特别注意过程、函数所完成的子任务以及和主程序之间的参数传递关系。
在阅读程序中,比较好的方法是首先阅读主程序,看其需要调用的过程或函数是什么,最后要求输出变量是什么;其次在阅读程序中,将较长的程序分成几个程序段(特别注意循环结构、判断结构),阅读理解各程序段的功能以及各程序之间的关联。
NOIP2011-1.#include<iostream>using namespace std;int main(){int i,n,m,ans;cin>>n>>m;i=n;ans=0;while(i<=m){//从i=10~20,共循环计数11次ans+=i;//每次循环,ans累加一次i 值i++;}cout<<ans<<endl;//此时ans值应为(10+20)*11/2,即165 return 0;}输入: 10 20输出: 165NOIP2011-2.#include<iostream>#include<string>using namespace std;int main(){string map= "2223334445556667778889999";//数组中元素位置是从0开始计数的string tel;int i;cin>>tel;for(i=0;i<tel.length();i++)if((tel[i]>='0') && (tel[i]<='9') )//如果输入的tel是0~9,直接输出tel值cout<<tel[i];else if( (tel[i]>='A') && (tel[i]<='Z'))cout<<map[tel[i]-'A'];//如果输入的tel是A~Z,则输出一个map数组中对应的元素//输出元素在map数组中位置为“输入字母与A的ASCII码的差值”//如果输入的是其他字符,比如“-”,则不符合循环条件,无输出cout<<endl;return 0;}输入: CCF-NOIP-2011输出: 22366472011NOIP2011-3.#include<iostream>#include<cstring>using namespace std;const int SIZE= 100;int main(){int n,i,sum,x,a[SIZE];cin>>n;memset(a,0,sizeof(a));for(i=1;i<=n;i++){cin>>x;a[x]++;}//循环结束时数组中的值为:a[1]=1,a[2]=2,a[3]=3,a[4]=2,a[5]=1,a[6]=2 i=0;sum=0;while(sum<(n/2+1)){//当sum值大于等于n/2+1,即sum>=6的时候,循环结束i++;sum+=a[i];}cout<<i<<endl;//输出循环结束时i 的值(不是sum的值)return 0;}输入:114 5 6 6 4 3 32 3 2 1输出: 3NOIP2011-4.#include<iostream>using namespace std;int solve(int n,int m){int i,sum;if(m==1) return 1;//递归函数solve(i,m)中m=1时返回函数值为1sum=0;for(i=1;i<n;i++)//递归函数solve(i,m)中i=1时不循环,sum=0sum+= solve(i,m-1);return sum;//可递归求得sum=solve(1,3)+(2,3)+(3,3)+(4,3)+(5,3)+(6,3)}int main(){int n,m;cin>>n>>m;cout<<solve(n,m)<<endl; //输出函数值,即sum值return 0;}输入: 7 4输出: 20NOIP2012-1.#include<iostream> using namespace std; int a, b, c, d, e, ans; int main(){cin>>a>>b>>c;d = a+b;e = b+c;ans = d+e;//ans=a+b+b+ccout<<ans<<endl;return 0;}输入: 1 2 5输出: 10NOIP2012-2.#include<iostream>using namespace std;int n, i, ans;int main(){cin>>n;ans = 0;for (i = 1; i <= n; i++)if (n % i == 0)ans++;//统计1~18中18的因数个数cout<<ans<<endl;return 0;}输入: 18输出: 6NOIP2012-3.#include<iostream>using namespace std;int n, i, j,a[100][100];int solve(int x,int y){int u, v;if(x == n)return a[x][y];//递归边界:当x=5时,solve(5,y)=a[5][y]u= solve(x + 1, y);v= solve(x + 1, y + 1);if(u > v)return a[x][y] + u;elsereturn a[x][y] + v;//用递归最终求得solve(1,1)=a[1][1]+solve(2,2)=2+12=14 }int main(){cin>>n;for(i = 1; i <= n; i++) for (j = 1; j <= i; j++) cin>>a[i][j];cout<<solve(1,1)<<endl; return 0;}输入:52-1 42 -1 -2-1 6 4 03 2 -1 5 8输出: 14NOIP2012-4.#include<iostream>#include<string> using namespace std; int n, ans, i, j;string s;char get(int i){if(i < n)return s[i];elsereturn s[i-n];//i<8时,get(i)返回s[i];i>=8时,get(i)返回s[i-8],从第一个开始返回}int main(){cin>>s;n= s.size();ans= 0;for(i = 1; i <= n-1; i++){for (j = 0; j <= n-1; j++)if (get(i+j) < get(ans+j)){ans = i;break;}else if (get(i+j) > get(ans+j))break;}//此循环执行完毕,ans=7for(j = 0; j <= n-1; j++)cout<<get(ans+j);//1,ans+j<8,输出s[7+0];2,ans+j=8,输出s[8-8];3,ans+j=9,输出s[9-8]……cout<<endl;return 0;}输入: CBBADADA输出: ACBBADADNOIP2013-1.#include<iostream>using namespace std;int main(){inta, b;cin>>a>>b;cout<<a<<"+"<<b<<"="<<a+b<<endl;return 0;}//输出:3+5=8输入: 3 5输出: 3+5=8NOIP2013-2.#include<iostream>using namespace std;int main(){int a, b, u, i, num;cin>>a>>b>>u;num = 0;for (i = a; i <= b; i++)if ((i % u) == 0)num++;//1-100之间有多少数是15的倍数cout<<num<<endl;return 0;}输入: 1 100 15输出: 6NOIP2013-3.#include<iostream>using namespace std;int main(){const int SIZE = 100;int n, f, i, left, right, middle, a[SIZE]; cin>>n>>f;for (i = 1; i <= n; i++)cin>>a[i];left = 1;right = n;do {middle= (left + right) / 2;if(f <= a[middle])right = middle;elseleft = middle + 1;}while (left < right);// middle=6,17>a[6],则left=7// middle=9,17<a[9],则right=9 // middle=8,17<a[8],则right=8// middle=7,17=a[7],则right=7 // left=right,直接输出leftcout<<left<<endl;return 0;}输入:12 172 4 6 9 11 15 1718 19 20 21 25 输出: 7NOIP2013-4.#include<iostream>using namespace std;int main(){constint SIZE = 100;intheight[SIZE], num[SIZE], n, ans; cin>>n;for(int i = 0; i < n; i++) {cin>>height[i];num[i] = 1;for (int j = 0; j < i; j++) {if ((height[j] < height[i]) && (num[j] >= num[i]))num[i] = num[j]+1;}}//两两相比,得出num[0], num[1], num[2], num[3], num[4], num[5]ans= 0;for(int i = 0; i < n; i++) {if (num[i] > ans) ans = num[i];}//得出num中最大值,即在数组height中第几位数值最大cout<<ans<<endl;return 0;}输入:62 53 11 12 4输出: 4不懂算法?跟踪变量!列表模拟!遇到递归?画树形图!注意边界!找到规律了?还会流程图?恭喜你,32分到手了!NOIP2014-1.#include <iostream>using namespace std;int main(){int a, b, c, d, ans;cin>> a >> b >> c;d = a - b; //将a-b=-1赋值给d a = d + c; //将d+c=3赋值给a ans = a * b; //ans=a*b=3*3=9 cout<< "Ans = " << ans << endl; return 0;}输入:2 3 4输出: Ans=9NOIP2014-2.#include <iostream>using namespace std;int fun(int n){if (n == 1)return 1; //边界fun(1)=1if (n == 2)return 2; //边界fun(2)=2 return fun(n - 2) - fun(n - 1); } //fun(n)=fun(n-2)-fun(n-1) int main(){int n;cin >> n;cout << fun(n) << endl;//fun(7)=fun(5)-fun(6)=-11 return 0;}输入: 7输出: -11NOIP2014-3.#include <iostream>#include <string>using namespace std;int main(){int i, len;getline(cin, st);len = st.size();for(i = 0; i < len; i++){if (st[i] >= 'a' && st[i] <= 'z')st[i] = st[i] - 'a' + 'A';} //如果字符串st中字母小写,则替换成大写cout<< st << endl;return 0;}输入: Hello, my name is Lostmonkey.输出: HELLO, MY NAME IS LOSTMONKEY.NOIP2014-4.#include <iostream>using namespace std;const int SIZE =100;int main(){int p[SIZE];int n, tot, i, cn;cin>> n;for(i = 1; i <= n; i++)p[i] = 1; //p[1]-p[30]中所有元素赋值1 for(i = 2; i <= n; i++){if (p[i] == 1)tot++; //计数cn = i * 2; //找出2-30中所有2i while (cn <= n) {p[cn] = 0;cn += i; //找出2-30中所有3i}}//对2-30中素数计数,并输出个数cout<< tot << endl;return 0;}输入: 30输出: 10NOIP2015-1.#include <iostream>using namespace std;int main(){int a, b, c;a = 1;b = 2;c = 3;if(a > b) //不符合循环条件,不执行if(a > c)cout << a << ' ';elsecout << b << ' ';cout << c << endl;return 0;}输出: 3NOIP2015-2.#include <iostream>using namespace std;struct point{int x;int y;}; //声明结构体类型pointint main(){int a, b, c;struct EX{int a;int b;point c;}e; //声明结构体类型EXe.a = 1; //结构体变量e中变量ae.b = 2; //结构体变量e中变量be.c.x = e.a + e.b;//结构体变量e中的结构体变量c中的变量x e.c.y = e.a * e.b;//结构体变量e中的结构体变量c中的变量y cout << e.c.x << ','<< e.c.y << endl; return 0;}输出: 3,2NOIP2015-3.#include <iostream>#include <string>using namespace std;int main(){string str;int i;int count;count = 0;getline(cin, str);for(i = 0; i < str.length();i++)if(str[i] >= 'a' &&str[i] <= 'z')count++; //统计字符串中小写字母数量cout << "It has "<< count << " lowercases" << endl; return 0;}输入: NOI2016will be held in Mian Yang.输出: It has 18 lowercasesNOIP2015-4.#include <iostream>#include <string>using namespace std;void fun(char *a, char *b){a = b;(*a)++;} //指针题int main(){char c1, c2, *p1, *p2;c1 = 'A';c2 = 'a';p1 = &c1;p2 = &c2;fun(p1, p2);//p1=p2=&c2,把c2的地址赋值给指针变量p1 //p1++,则有&’a’+1=&’b’, 所以,c2=’b’,cout << c1 << c2<< endl;return 0;}输出: AbNOIP2016-1.#include <iostream>using namespace std;int main(){int max, min, sum, count = 0;int tmp;cin>> tmp;if(tmp == 0)return0; //如果输入的数字是0,程序退出max= min = sum = tmp;count++;while(tmp != 0) {cin>> tmp;if(tmp != 0) {sum += tmp; //求和count++;//计数if(tmp > max)max = tmp; //找出最大值if(tmp < min)min = tmp; //找出最小值}}cout<< max << "," << min << ","<< sum / count << endl; //输出“最大值, 最小值, 平均值”return 0;}输入: 1 2 3 4 5 6 0 7输出: 6,1,3NOIP2016-2.#include <iostream>using namespace std;int main(){int i = 100, x = 0, y = 0;while (i > 0) {i--;x = i % 8;if (x == 1)y++;} //统计1-100中有多少数是“8的倍数+1”cout << y << endl;return 0;}输出: 13NOIP2016-3.#include <iostream>using namespace std;int main(){int a[6] = {1, 2, 3, 4, 5, 6};int pi = 0;int pj = 5;int t , i;while(pi < pj) {t =a[pi];a[pi]= a[pj];a[pj]= t;pi++;pj--;} //把数组a[6]中的数字顺序颠倒过来for(i = 0; i < 6; i++)cout<< a[i] << ",";cout<< endl;return 0;}输出: 6,5,4,3,2,1,NOIP2016-4.#include <iostream>using namespace std;int main(){int i, length1, length2; strings1, s2;s1= "I have a dream.";s2 = "I Have A Dream."; length1 = s1.size();length2 = s2.size();for (i = 0; i < length1; i++)if (s1[i] >= 'a' && s1[i]<= 'z') s1[i] -= 'a' - 'A';//把s1里的小写字母全部换成大写for (i = 0; i < length2; i++)if (s2[i] >= 'a' && s2[i]<= 'z') s2[i] -= 'a' - 'A';//把s2里的小写字母全部换成大写if (s1 == s2)cout << "=" <<endl;else if (s1 > s2)cout << ">" <<endl;elsecout << "<" <<endl;return 0;}输出: =。
【通用】信息学奥赛NOIP普及组历届试题分析.ppt
![【通用】信息学奥赛NOIP普及组历届试题分析.ppt](https://img.taocdn.com/s3/m/832015da7fd5360cbb1adb28.png)
.,.,
4
珠心算测验 (noip2014普及组第一题)
珠心算是一种通过在脑中模拟算盘变化来完成快 速运算的一种计算技术。珠心算训练,既能够开 发智力,又能够为日常生活带来很多便利,因而 在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加 法能力的测验方法。他随机生成一个正整数集合, 集合中的数各不相同,然后要求学生回答:其中 有多少个数,恰好等于集合中另外两个(不同的) 数之和? 最近老师出了一些测验题,请你帮忙求 出答案。
不过,如果把调查结果就以这种方式呈现出来,大 多数人肯定不会满意。因为这个比例的数值太大, 难以一眼看出它们的关系。对于上面这个例子,如 果把比例记为 5:3,虽然与 真实结果有一定的误差, 但依然能够较为准确地反映调查结果,同时也显得 比较直观。
现给出支持人数 A,反对人数 B,以及一个上限 L, 请你将 A 比 B 化简为 A’比 B’,要求在 A’和 B’均 不大于 L 且 A’和 B’互质(两个整数的最大公约数 是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值 尽可能小。
输入样例 2 23 ?*? *??
输出样例 2 mine.out 2*1 *21
对于 100%的数据,1≤n≤100,1≤m≤100
.,.,
10
比例简化 (noip2014普及组第二题)
在社交媒体上,经常会看到针对某一个观点同意与 否的民意调查以及结果。例如,对某 一观点表示 支持的有 1498 人,反对的有 902 人,那么赞同与 反对的比例可以简单的记为1498:902。
.,.,
11
比例简化 (noip2014普及组第二题)
输入格式 输入共一行,包含三个整数 A,B,L,每两个整
NOIP普及组历届试题分析
![NOIP普及组历届试题分析](https://img.taocdn.com/s3/m/7e886f08cc7931b764ce150f.png)
对于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 的值 尽可能小。
1995-2008 历届NOIP试题及详解
![1995-2008 历届NOIP试题及详解](https://img.taocdn.com/s3/m/38cb6f03ad02de80d4d840d1.png)
N=6
正整数化为二进制数,在此二进制数中,我们将数字 16 17 18 19 20 1
1
于数字
0
的个数的这类二进制数称为 15 30 31 32 21 2
A
类数,否则就称
数。
14 29 36 33 22 3
(13)10=1(3 1218013)5 234 23 4
的个数为132,207 的26个2数5 为241,5则称此数为 A 类数;
提示:文档已分节,可用 word 跳转节功能 本文为本人将 1995-2008 年历届 NOIP 试题、研究成果整理而成,由于“年代久远”所以有不少 资料没有找到。但本人都尽量整理最有价值的信息记录于此。 资料来源皆为网络,若引用请注明出处 一不注意就 208 页了呢~ 其实最初只是想方便自己,看着一下午的成果,就忍不住放到了网络 上。由于赶时间,质量不太好,而且历届 NOIP 的排版也不一样,只是做了粗略的整理、排 版,若有错误之处,敬请谅解。 回首历届 NOIP,甚至比我自己出生的还早的老题,一代代 OIer 就从这条路上走过,作为一个 不大努力的 OIer,我甚至为自己感到愧疚。总之,为了报答一代代出题人、教师、主办方以及 OIer 们,在努力一把也不迟啊。
96
109
108
1 <2> 本题 18 分(4%+6%+8%)
① 输入 N=1 (4%) 结果:
② 输入 N=3 (6%) 结果:
1
781
692
543 ③ 输入 N=10(8%)
结果: 28 29 30 31 32 33 34 35 36 1
27 58 59 60 61 62 63 64 37 2
26 57 80 81 82 83 84 65 38 3
信息学奥赛NOIP讲座历年真题分类讲解之程序设计与数学
![信息学奥赛NOIP讲座历年真题分类讲解之程序设计与数学](https://img.taocdn.com/s3/m/59896422b7360b4c2e3f64bc.png)
程序设计与数学
快速幂||取余运算
输入b、p、k的值,求b^p mod k的值。其中b、`p、k为长整型数。 输入格式:
三个整数b、p、k。 输出格式:
输出“b^p mod k=s”,s为运算结果。 输入样例1: 2 10 9 输出样例1: 2^10 mod 9=7
质因数分解(NOIP 2012 普及组 第一题)
错位排列(NOIP2002提高组)
在书架上放有编号为1 ,2 ,...,n的n本书。现将n本书全部 取下然后再放回去,当放回去时要求每本书都不能放在原来的位置上。 例如:n = 3时:
原来位置为:1 2 3 放回去时只能为:3 1 2 或 2 3 1 这两种 问题:求当n = 5时满足以上条件的放法共有多少种?(不用列出每 种放法)
输入仅包含一个数n(1< n < 50)。 输出格式:
输出仅包含一个数———你的答案。 样例输入 5 样例输出 13
公式推导(NOIP1999普及组)
根据Nocomachns定理,任何一个正整数n的立方一定可以表示成n 个连续的奇数的和。
例如: 1^3= 1 2^3= 3+ 5 3^3= 7+ 9 +11 4^3= 13+15+17+19 在这里,若将每一个式中的最小奇数称为X,那么当给出n之后,请写 出X与n之间的关系表达式:
给你一个数字 求它的所有约数的和。比如12,约数有1,2,3,4, 6,12 加起来是28。现在给你一个数字N。 (1 <= N<= 1,000,000). 【输入】
一个数字N 【输出】 约数之和 样例输入 12 样例输出 28
取数游戏
我们来玩一个游戏:自然数1到n,按顺序列成一排,你可以从中取走任意个 数,但是相邻的两个不可以同时被取走。请你算出一共有多少种取法。 输入格式:
1995-2008 历届NOIP试题及详解
![1995-2008 历届NOIP试题及详解](https://img.taocdn.com/s3/m/38cb6f03ad02de80d4d840d1.png)
a 输入:N=5 B=(0,0,0,0,0)
输出: A=(4,3,2,1,0)
b 输入:N=10 B=(0,1,2,3,4,5,6,7,8,9)
输出: A=(0,1,2,3,4,5,6,7,8,9)
c 输入:N=7 B=(0,0,0,0,4,5,6)
R
Y Y
P2=B R N2R=2
Y
P3=Y R N3=R1
Y
Q
RR
Y
排列方案: 排列总数: 105×2=210
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y
RRR
BB
Y BB
① 输10入5×2=210 3 4R 4 R4 4R 3 4 B B
1 2R 2 R2 2R 2 1 3B B
应打印出完整的图形R:(R12 分R)
BB
15 1R6 1R6 1R5 4 B B
Y Y Y Y Y
7 8 R 8R 8 R 7 7
BB
Y
3 4 R4 R4 R4 3 4 B B
Y
1 2 2R 2 R 2 R 2 1
19 18 17 16 15 14 13 12 11 10 <3> 本题 14 分
普及组近5年NOIP试题分析试题分析
![普及组近5年NOIP试题分析试题分析](https://img.taocdn.com/s3/m/6804622143323968001c9206.png)
1≤ L ≤ R≤10000。
NOIP2010——数字统计
从L到R枚举每一个数i,对i进行分离数字,直接
统计有多少个2......
分离数字的过程
void count(int n)
{while (n>0) {if (n%10==2) ans++; n/=10; }
}
NOIP2010——接水问题
NOIP2012——寻宝
藏宝楼共有N+1层,最上面一层是顶层,顶层有一个 房间里面藏着宝藏。除了顶层外,藏宝楼另有 N层, 每层M个房间,这M个房间围成一圈并按逆时针方向 依次编号为0,…,M-1。其中一些房间有通往上一 层的楼梯,每层楼的楼梯设计可能不同。每个房间里 有一个指示牌,指示牌上有一个数字x,表示从这个 房间开始按逆时针方向选择第x个有楼梯的房间(假 定该房间的编号为k),从该房间上楼,上楼后到达 上一层的k号房间。比如当前房间的指示牌上写着2, 则按逆时针方向开始尝试,找到第2个有楼梯的房间, 从该房间上楼。如果当前房间本身就有楼梯通向上层, 该房间作为第一个有楼梯的房间。
NOIP2010——三国
输入样例
输出样例
8
42 24 10 29 27 12 58
1
77
31 8 16 26 80 6
25 3 36 11 5 33 20 17 13 15 77 9 4 50
19
NOIP2010——三国
显然每个武将对应的最大默契值都无法选到,
但是可以保证能选到次大的。所以就在次大的 中选一个最大的作为答案咯。这样计算机肯定 也得不到更大的值所以一定是可以获胜的。
NOIP2012——质因数分解
历届NOIP试题及详解
![历届NOIP试题及详解](https://img.taocdn.com/s3/m/68a5364e4028915f814dc229.png)
间的整数,且 A[i]≠A[j](当 i≠j 时)。
例如:N=6 时,有:
A=(4,3,0,5,1,2)
此时,数组 A 的编码定义如下:
A[0]的编码为 0;
A[i]的编码为:在 A[0],A[1],……A[i-1]中比 A[i]的值小的个数(i=1,2……N-1)
∴上面数组 A 的编码为:
B=(0,0,0,3,1,2)
输出: A=(3,2,1,0,4,5,6)
<5> 本题共 30 分(10%+10%+10%)
① 数据输入: N=6
P1=R
N1=1
Q
排列方案: R ② 排数列据总输数入=:6 N=6 R
P1=R
NR1=2
P2=Y
N2=1 R
Q
R
排列方案: R ③ 排数列据总输数入=:12N=1R2
P1=RR
R
Y
R R N1= 3
③ 同一种颜色的灯不能分开;
④ 不同颜色的灯之间至少要有一个空位置。
例如:N=8(格子数) R=2(红灯数) B=3(蓝灯数)
放置的方法有:
R-B 顺序
RR
BBB
RR
BBB
RR
BBB
RR
BBB
RR
BBB
B-R 顺序
RR
BBB
BBB
RR
BBB
RR
BBB
RR
BBB
RR
BBB
RR
放置的总数为 12 种。 数据输入的方式为:
提示:文档已分节,可用 word 跳转节功能 本文为本人将 1995-2008 年历届 NOIP 试题、研究成果整理而成,由于“年代久远”所以有不少 资料没有找到。但本人都尽量整理最有价值的信息记录于此。 资料来源皆为网络,若引用请注明出处 一不注意就 208 页了呢~ 其实最初只是想方便自己,看着一下午的成果,就忍不住放到了网络 上。由于赶时间,质量不太好,而且历届 NOIP 的排版也不一样,只是做了粗略的整理、排 版,若有错误之处,敬请谅解。 回首历届 NOIP,甚至比我自己出生的还早的老题,一代代 OIer 就从这条路上走过,作为一个 不大努力的 OIer,我甚至为自己感到愧疚。总之,为了报答一代代出题人、教师、主办方以及 OIer 们,在努力一把也不迟啊。
历年NOIP(普及组提高组)试题难度列表
![历年NOIP(普及组提高组)试题难度列表](https://img.taocdn.com/s3/m/78453b1c69eae009581beca0.png)
历年NOIP(普及组)难度分析 by Climber.pINOIP提高组复赛考察点详细分析动态规划:12 模拟:10数学:5 图论:4搜索:4 构造:3贪心:2【动态规划】平均难度系数:0.55此项为历届NOIP考察次数最多的知识点。
主要有 1.区间模型 2.子序列模型 3.资源分配模型以及一些简单的多维状态设计技巧。
动态规划可以与图,树,高精度等知识点配合出题。
【模拟】平均难度系数:0.76平均每届NOIP都会出现1个模拟题。
这种题一般算法很简单,需要选手细心理解题目意思,注意细节。
考察选手的代码实现能力。
【数学】平均难度系数:0.46需要掌握质数及其性质,基础的实属操作,加法原理和乘法原理。
此类题需要选手对数学规律的灵感。
【图论】平均难度系数:0.50历届考察点基本上都是 1.最短路问题和 2.特殊图的性质。
特殊图包括树,拓扑图,二分图等。
历届NOIP在图论上的考察并不是很多。
【搜索】平均难度系数:0.38历届搜索题一般都比较难,搜索算法本身简单,于是题目会提高选手对其他方面的要求。
主要有搜索优化和模拟。
写搜索题时应该以尽量多得分为目标。
【构造】平均难度系数:0.27构造类题目一般没有明确的算法,需要选手仔细分析题目的实质,并得出解法。
这个解法通常不是唯一的。
有时一个好的贪心可以得相当多的分。
有时搜索剪枝可以很大的提高效率。
同样以多得分为目标。
【【贪心】平均难度系数:0.75此类题需要选手对算法的直觉,贪心正确性一旦被证明,通常题目就简单了。
NOIP普及组初赛历年试题及答案求解题篇
![NOIP普及组初赛历年试题及答案求解题篇](https://img.taocdn.com/s3/m/8b324d9bd4d8d15abe234e4e.png)
NOIP普及组初赛历年试题及答案求解题篇问题求解:每次共2题,每空5分,共计10分。
每题全部答对得 5 分,没有部分分。
注:答案在文末在NOIP初赛问题求解中,经常会遇到排列组合问题。
这一类问题不仅内容抽象,解法灵活,而且解题过程极易出现“重复”和“遗漏”的错误,这些错误甚至不容易检查出来,所以解题时要注意不断积累经验,总结解题规律。
解答排列组合问题,首先必须认真审题,明确是属于排列问题还是组合问题,或者属于排列与组合的混合问题,其次要抓住问题的本质特征,灵活运用基本原理和公式进行分析解答。
同时还要注意讲究一些策略和技巧,比如采用分类、分步、捆绑等方法,也可以借助表格、方程等工具,使一些看似复杂的问题迎刃而解。
NOIP2011-1. 每份考卷都有一个8位二进制序列号。
当且仅当一个序列号含有偶数个1时,它才是有效的。
例如,0000000、01010011都是有效的序列号,而11111110不是。
那么,有效的序列号共有______个。
NOIP2011-2. 定义字符串的基本操作为: 删除一个字符、插入一个字符和将一个字符修改成另外一个字符这三种操作。
将字符串A变成字符串B的最少操作步数,称为字符串A到字符串B的编辑距离。
字符串“ ABCDEFG ”到字符串“BADECG ”的编辑距离为_______。
NOIP2012-1. 如果平面上任取n 个整点(横纵坐标都是整数) ,其中一定存在两个点,它们连线的中点也是整点,那么n至少是_____。
NOIP2012-2. 在NOI期间,主办单位为了欢迎来自全国各地的选手,举行了盛大的晚宴。
在第十八桌,有5名大陆选手和5名港澳选手共同进膳。
为了增进交流,他们决定相隔就坐,即每个大陆选手左右相邻的都是港澳选手、每个港澳选手左右相邻的都是大陆选手。
那么,这一桌共有_____种不同的就坐方案。
注意:如果在两个方案中,每个选手左边相邻的选手均相同,则视为同一个方案。
NOIP2013-1. 7 个同学围坐一圈,要选2 个不相邻的作为代表,有_____种不同的选法。
noip普及组初赛试题
![noip普及组初赛试题](https://img.taocdn.com/s3/m/06dd034691c69ec3d5bbfd0a79563c1ec5dad7f5.png)
noip普及组初赛试题导语:NOIP(全国青少年信息学奥林匹克竞赛)普及组初赛试题是一个重要的竞赛,对于参与者来说具有很大的挑战性。
本文将为大家提供NOIP普及组初赛试题的详细说明和解析,希望对大家在备战竞赛中起到一定的帮助和指导。
一、试题背景NOIP普及组初赛试题是国内一项重要的信息学竞赛,它旨在选拔出具有较高综合素质和较强信息学能力的学生,为他们提供机会参加进一步的培训和比赛,进一步提高其信息学水平。
本次试题包含多个题目,涉及算法、数据结构、编程等多个方面的知识点。
二、试题内容1. 题目一:数学运算要求:编写一个程序,输入两个整数a和b,输出它们的和。
注意:a和b的范围在-1000到1000之间。
2. 题目二:查找元素要求:编写一个程序,输入一个整数n和一个由n个整数组成的数组,再输入一个整数x,输出x在数组中的索引位置。
若x不存在于数组中,则输出-1。
3. 题目三:字符串处理要求:编写一个程序,输入一个字符串s,输出字符串s的第一个字母和最后一个字母。
若字符串s为空,则输出空字符串。
4. 题目四:文件操作要求:编写一个程序,从输入文件input.txt中读取n个整数,将其从小到大排序后输出到输出文件output.txt中。
输入文件input.txt的第一行为一个整数n,接下来的n行为n个整数。
5. 题目五:模拟游戏要求:编写一个程序,模拟一个游戏。
游戏开始时,玩家位于位置0,玩家可以输入命令"l"向左移动一格,输入命令"r"向右移动一格。
玩家的移动轨迹将被输出到控制台上。
直到玩家输入命令"q"退出游戏。
三、解题思路1. 题目一:数学运算这是一个非常简单的题目,只需要使用基本的数学运算符进行相加操作即可。
首先,接收用户输入的两个整数a和b,然后使用加法运算符将其相加,最后将结果输出即可。
2. 题目二:查找元素这是一个查找问题,我们可以使用线性搜索的方法来解决。
noip历年考题分析
![noip历年考题分析](https://img.taocdn.com/s3/m/6738fb3e4431b90d6c85c757.png)
一、进制(这种题型你们可以看复印的资料上比较详细)(十一届)3.和十进制数23的值相等的二进制数是(D )。
A. 10110B.11011C.11011D.10111E.10011(十一届)18.(3725)8+(B)16的运算结果是(B )。
A.(3736)8B.(2016)10C.(1111110000)2D.(3006)10E.(7B0)16(十二届)15. 与十进制数1770对应的八进制数是(C )。
A. 3350B.3351C.3352D.3540(十二届)18.(2010)16 +(32)8的结果是(A )。
A.(8234)10B.(202B)16C.(20056)8D. (100000000110)2(十三届)17.与十进制数1770对应的八进制数是(C)。
A.3350 B.3351 C.3352 D.3540(十三届)19.(2070)16 + (34)8 的结果是(A)。
A.(8332)10 B.(208A)16 C.(100000000110)2D.(20212)8(十四届)8.与十进制数28.5625相等的四进制数是( D )。
A.123.21 B.131.22 C.130.22 D.130.21(十四届)12.(2008)10+(5B)16的结果是( A )。
A.(833)16 B.(2089)10 C.(4163)8 D.(100001100011)2二、字符串(十一届)1.在字符串“ababacbabcbdecced”中出现次数最多的字母出现了(B)次。
A.6B.5C.4D.3E.2(十四届)2.设字符串S=”Olympic”,S的非空字串的数目是(A )。
A.28 B.29 C.16 D.17三、(“∧”逻辑与也称交运算若A 为真且B 为真,则命题A ∧B 为真;否则为假;“∨”逻辑或也称并运算只要A 或者B 之中一个为真,则命题A ∧B 为真;否则为假)(十一届)2.设全集I={a,b,c,d,e,f,g,h},集合A={a,b,c,d,e,f},B={c,d,e},C={a,d},那么集合A∩B∩~C为(A)。
NOIP部份试题分析和解答.doc
![NOIP部份试题分析和解答.doc](https://img.taocdn.com/s3/m/2181e0c80b1c59eef9c7b452.png)
NOIP部份试题分析和解答南宁三中孙国强QQ: 393936008竞赛试题名称算法N01P2004津津的储蓄计划模拟合并果子排序+二分杏找合唱队形动态规划虫食算搜索N01P2005谁拿了最多奖学金模拟过河数学或动态规划篝火晚会图论或数学等价表达式分治NOIP2006能量项链动态规划金明的预算方案动态规划作业调度方案模拟2”k进制数数学+高精N01P2007统计数字排序字符串的展开模拟知阵取数游戏动态规划+高精树网的核图论N01P2008笨小猴模拟火柴棒等式搜索或数学传纸条动态规划双栈排序图论一、枚举:I 1 1 e ! 11 It I H It 1 LJ n. -i "i JIJ iri j注意:1.加号与等号各自需要两根火柴棍2.如果A,B,则A+B=C与B+A=C视为不同的等式(A、B、0=0)3.n根火柴棍必须全部用上【输入】输入文件matches.in共一行,乂一个整数n (nv=24)。
【输出】输出文件matches.out共一行,表示能拼成的不同等式的数目。
【输入输出样例1 ]matches, in matches, out142【输入输出样例1解释】2个等式为0+1=1和1+0=1 □【输入输出样例2】matches, in matches, out189【输入输出样例2解释】9个等式为: 0+4=4 0+11=11 1+10=112+2=42+7=94+0=47+2=9 10+1=11 11+0=11既然我们用枚举的方法,就要确定枚举什么?枚举的数量(范)有多少,估算时间和空间复杂度。
2.举例:一-年一度的高一YL杯超级篮球赛开赛了。
当然,所谓超级,意思是参赛人数可能多余5人。
小三对这项篮球非常感兴趣,所以一场都没有落下。
每个中午都准时守侯在篮球场看比赛。
经过一个星期的研究,小三终于对篮球的技战术找到了一丝丝感觉了。
他发现打YL 杯的每个班都有一奁相似的进攻战术:1:控球后卫带球到前场,找到一个最佳攻击点(x,y)2:所有除控卫以外的队员都从各自的当前位置迅速向(x,y)移动3:控球后卫根据场上情况组织进攻这个战术对于一般情况是非常奏效的,但是每个队员毕竞不像小三一样每天精力过剩, 每个队员都有一个疲劳指数W,显然对于每个队员的移动需要消耗一些能量。
历届信息学奥赛试题评析
![历届信息学奥赛试题评析](https://img.taocdn.com/s3/m/fe8f3b78a98271fe910ef993.png)
历届信息学奥赛试题评析—阅读程序写结果第一题:var n,i,temp,sum:integer;a:array[1..100] of integer;beginreadln(n);for i:=1 to n doread(a[i]);for i:=1 to n-1 doif a[i]>a[i+1] thenbegintemp:=a[i];a[i]:=a[i+1];a[i+1]:=temp;end;for i:=n downto 2 doif a[i]<a[i-1] thenbegin temp:=a[i];a[i]:=a[i-1];a[i-1]:=temp;end;sum:=0;for i:=2 to n-1 doinc(sum,a[i]);writeln(sum div (n-2)); { div 表示整除} end.输入:840 70 50 70 20 40 10 30输出:点评:考查选择语句、循环语句、数组等内容,计算量中等。
难度:中等题。
第二题:program ex2;var n,i,ans:integer;function gcd(a,b:integer):integer;beginif a mod b =0then gcd:=belse gcd:=gcd(b,a mod b); { mod表示取余数}end;beginreadln(n);ans:=0;for i:=1 to n doif gcd(n,i)=ithen begin writeln(i); ans:=ans+1; end;writeln(ans);end.输入:120输出:点评:考查选择语句、循环语句、函数、递归等内容,计算量中等。
难度:中等题。
第三题:vardata:array[1..20] of integer;n,i,h,ans:integer;procedure merge;begindata[h-1]:=data[h-1]+data[h];dec(h); { dec(h) 表示h:=h-1 }inc(ans); { inc(ans) 表示ans:=ans+1 } end;beginreadln(n);h:=1;data[h]:=1;ans:=0;for i:=2 to n dobegin inc(h);data[h]:=1;while (h>1) and (data[h]=data[h-1]) domerge;end;writeln(ans);end.输入:8输出:点评:考查循环语句、数组、过程等内容,计算量较大。
历年NOIP考题分析
![历年NOIP考题分析](https://img.taocdn.com/s3/m/20732911e2bd960590c677de.png)
两个主要方面
• 竞赛中我们的目的就是得分。在比赛中,将自己能力范围内的分全部抓住, 不丢掉不该丢的分,就是最好的得分方式。
• 减少非受迫性失误:会做的都做对 • 在减少失误的前提下增加得分:不会做的都蒙对
减少非受迫性失误:
• 理解题目有误 • 思路想法错误 • 时间分配不合理 • 调试失误 • 心态失衡 • 低级失误
年份 2017 2016 2015 2014 2013 2012 2011
T1
T2
T3
T4
T5
打表+ 扩欧 模拟
模拟
模拟
快速 幂 模拟
模拟
模拟
LCA+树上 差分 tarjan+拓 扑 图遍历+二 次展开式 逆序对
高精度+贪 心 贪心
tarj;剪枝+ 状压 背包DP
• B 三思而后行: • 在草稿纸上,而非大脑干想,推算自己的思路 • 有了思路后验算样例 • 遇到熟悉的题目要十分警惕,先要在草稿纸上演算计算步骤,并测试其正确性 • 写下代码前要有充足的思考时间,最好举例子通过草稿验证 • 不要写从未接触过/极其不熟练的算法,即使之前听说过
时间分配不合理:
• 有的同学可能一上来就和一道难题较上劲了,(主观认为这道题目十分简单大家都会做,我做不出来就落后了 / 我做过类似的题目,别人没有做过, 我做了就能拉分了),在编程、调试等环节花了大量时间,导致其他的题目得分不理想。
信息学奥赛普及组1-18届问题求解题解析
![信息学奥赛普及组1-18届问题求解题解析](https://img.taocdn.com/s3/m/68ca9e54804d2b160b4ec0e8.png)
历届“问题求解”解析(2013竞赛辅导)问题求解是信息学竞赛初赛中常见题型,它共两题,每题5分,共10分,十六届增加了比重,有三题,占15分。
诸如寻找假币、博弈原理、抽屉原理、容斥问题、排列组合、逻辑推理、递推关系等问题出现在问题求解中。
(相关问题的具体讲解根据需要考虑发讲义) 第一届(逻辑推理问题)1. 有标号为A 、B 、C 、D 和1、2、3、4的8个球,每两个球装一盒,分装4盒。
标号为字母的球与标号为数字的球有着某种一一对应的关系(称为匹配),并已知如下条件: ① 匹配的两个球不能在一个盒子内。
② 2号匹配的球与1号球在一个盒子里。
③ A 号和2号球在一个盒子里。
④ B 匹配的球和C 号球在一个盒子里。
⑤ 3号匹配的球与A 号匹配的球在一个盒子里。
⑥ 4号是A 或B 号球的匹配球。
⑦ D 号与1号或2号球匹配。
请写出这四对球匹配的情况。
第四届(递推、树、图)1. 已知一个数列U 1,U 2,U 3,…,U N ,… 往往可以找到一个最小的K 值和K 个数a 1,a 2,…,a n 使得数列从某项开始都满足: U N+K =a 1U N+K-1+a 2U N+K-2+……+a k U N (A)例如对斐波拉契数列1,1,2,3,5,…可以发现:当K=2,a 1 =1,a 2 =1时,从第3项起(即N>=1)都满足U n+2 =U n+1+U n 。
试对数列13,23,33,…,n 3,…求K 和a 1,a 2, …,a K 使得(A )式成立。
当K= 4,a 1,a 2,…,a k 为a 1=4, a 2=6, a 3=4,a 4=-1对数列132333,…,n 3,…(A )成立。
2.给出一棵二叉树的中序遍历:DBGEACHFI 与后序遍历:DGEBHIFCA 画出此二叉树。
3.用邻接矩阵表示下面的无向图:表示该无向图的邻接矩阵为 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 1 1 0第五届(递推)将Ln 定义为求在一个平面中用n 条直线所能确定的最大区域数目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1≤单词长度≤10。 1≤文章长度≤1,000,000。
六、简单动态规划类试题
动态规划是解决多阶段决策最优化问题的一种思想方 法。一般我们从初始阶段出发,枚举每个阶段的所有 状态,在状态转移的过程中,我们需要决策。根据每 一步所选决策的不同,将随即引起状态的转移,最终 在变化的状态中产生一个决策序列。动态规划就是为 了使产生的决策序列在符合某种条件下达到最优。
样例输出:6
扫雷游戏 (noip2015普及组第二题)
扫雷游戏是一款十分经典的单机小游戏。 在 n 行 m 列的雷区中有一些格子含有地雷 (称之为地雷格) ,其他格子不含地雷(称之 为非地雷格) 。玩家翻开一个非地雷格时,该 格将会出现一个数字——提示周围格子中有多 少个是地雷格。 游戏的目标是在不翻出任何地 雷格的条件下,找出所有的非地雷格。
输入样例:
70 3 71 100
69 1 12
输出样例:
3
(1 <= T <= 1000) (1 <= M <= 100)
采药 (noip2005普及组第三题)
题目大意:共m株草药,每株草药有一个价值 和采摘的时间,问t时间能采摘到的草药的最大 价值。
统计单词个数 (noip2011普及组第二题) 样例输入1: To to be or not to be is a question
样例输出1: 20
样例输入2: to Did the Ottoman Empire lose its power at that time
样例输出2: -1 【输入输出样例2说明】 表示给定的单词to在文章中没有出现,输出整数-1。
输入样例 2 23 ?*? *??
输出样例 2 mine.out 2*1 *21
对于 100%的数据,1≤n≤100,1≤m≤100
比例简化 (noip2014普及组第二题)
在社交媒体上,经常会看到针对某一个观点同意与 否的民意调查以及结果。例如,对某 一观点表示 支持的有 1498 人,反对的有 902 人,那么赞同与 反对的比例可以简单的记为1498:902。
输入格式
输入共一行,包含三个整数 n,i,j,每两个整数 之间用一个空格隔开,分别表示矩阵大小、待求的 数所在的行号和列号。
输出格式
输出共一行,包含一个整数,表示相应矩阵中第 i 行第 j 列的数。
样例输入:4 2 3
样例输出:14
对于 50%的数据,1 ≤ n ≤ 100; 对于 100%的数据,1 ≤ n ≤ 30,000,1 ≤ i ≤ n,1 ≤ j ≤ n。
贪心
NOIP普及组题型分布
题型
简单 动态规划
题目 子矩阵(2014p4)、小朋友的数字(2013p3)
数学/数论
数据结构 图论(提高组)
表达式求值(2013p2)、 车站分级(2013p4 拓扑排序)
一、枚举类试题
枚举法的基本思想是根据提出的问题枚举所 有可能的解,并用问题给定的条件检验哪些 解是需要的,哪些解是不需要的。能使条件 成立,即为其解。
NOIP普及组历届试题分析
NOIP普及组题型分布
题型 枚举 模拟 字符串
题目 扫雷游戏(2015p2)、珠心算测验(2014p1)
数字统计(2010p1)、比例简化(2014p2) 金币(2015p1)、
螺旋方阵(2014p3)、计数问题(2013p1)、
数字反转(2011p1)、统计单词个数(2011p2)
不过,如果把调查结果就以这种方式呈现出来,大 多数人肯定不会满意。因为这个比例的数值太大, 难以一眼看出它们的关系。对于上面这个例子,如 果把比例记为 5:3,虽然与 真实结果有一定的误差, 但依然能够较为准确地反映调查结果,同时也显得 比较直观。
现给出支持人数 A,反对人数 B,以及一个上限 L, 请你将 A 比 B 化简为 A’比 B’,要求在 A’和 B’均 不大于 L 且 A’和 B’互质(两个整数的最大公约数 是 1)的前提下,A’/B’ ≥ A/B 且 A’/B’ - A/B 的值 尽可能小。
螺旋方阵试题分析
目标位置(i,j)到底在当前这一圈的第几个位置? 如目标数26所在的位置(4,5),在第2圈的什么位
置? 分两种情况: 1)目标数(i,j)在上行或右行; i+j-2q+1 2)目标数(i,j)在下行或左行; 距离第一个数的距离
i+j-2q+1
计数问题 (noip2013普及组第一题)
比如在给定范围[2, 22],数字2在数2中出现了1次,在 数12中出现了1次,在数20中出现了1次,在数21中出 现了1次,在数22中出现了2次,所以数字2在该范围内 一共出现了6次。
输入格式
输入共一行,为两个正整数L和R,之间用一个空格隔 开。
输出格式
输出共1行,表示数字2出现的次数。
样例输入:2 22
采药 (noip2005普及组第三题)
输入格式:
第一行有两个整数T和M,T代表总共能够用来采药的时间,M 代表山洞里的草药的数目。接下来的M行每行包括两个在1到 100之间(包括1和100)的整数,分别表示采摘某株草药的时 间和这株草药的价值。
输出格式:
一行只包含一个整数,表示在规定的时间内,可以采到的草药 的最大总价值。
试计算在区间1到n的所有整数中,数字x(0≤x≤9) 共出现了多少次? 例如,在1到11中,即在1、2、3、4、5、6、7、8、 9、10、11中,数字1出现了4次。
输入:
输入共1行,包含2个整数n、x,之间用一个空格隔 开。 输出:
输出共1行,包含一个整数,表示x出现的次数。 输入示例: 11 1 输出示例: 4 其他说明:
输入 输入共1行,一个整数N。
输出 输出共1行,一个整数,表示反转后的新数。
样例输入
123 样例输出
321
统计单词个数 (noip2011普及组第二题)
一般的文本编辑器都有查找单词的功能,该功 能可以快速定位特定单词在文章中的位置,有 的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求 是:给定一个单词,请你输出它在给定的文章 中出现的次数和第一次出现的位置。注意:匹 配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不 区分大小写的情况下完全相同(参见样例1), 如果给定单词仅是文章中某一单词的一部分则 不算匹配(参见样例2)。
枚举法其实是最简单的搜索算法。
珠心算测验 (noip2014普及组第一题)
珠心算是一种通过在脑中模拟算盘变化来完成快 速运算的一种计算技术。珠心算训练,既能够开 发智力,又能够为日常生活带来很多便利,因而 在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加 法能力的测验方法。他随机生成一个正整数集合, 集合中的数各不相同,然后要求学生回答:其中 有多少个数,恰好等于集合中另外两个(不同的) 数之和? 最近老师出了一些测验题,请你帮忙求 出答案。
普及组一般考查的动态规划:01背包,最长上升子序 列,一些简单的线性动规。
采药 (noip2005普及组第三题)
辰辰是个天资聪颖的孩子,他的梦想是成为世 界上最伟大的医师。为此,他想拜附近最有威 望的医师为师。医师为了判断他的资质,给他 出了一个难题。医师把他带到一个到处都是草 药的山洞里对他说:“孩子,这个山洞里有一 些不同的草药,采每一株都需要一些时间,每 一株也有它自身的价值。我会给你一段时间, 在这段时间里,你可以采到一些草药。如果你 是一个聪明的孩子,你应该可以让采到的草药 的总价值最大。”
输入格式: 输入文件只有1行,包含一个正整数K,表示发放金币的天数。
输出格式: 输出文件只有1行,包含一个正整数,即骑士收到的金币数。
输入输出样例
输入样例:
1000 输出样例:
29820
螺旋方阵 (noip2014普及组第三题)
一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右
对于100%的数据,1≤n≤1,000,000,0≤x≤9。
三、字符串类试题
对于字符串、表达式的求解、 大整数的处理 等等,我们经常采用字符串来处理。
字符串处理常见函数:
数字反转 (noip2011普及组第一题)
给定一个整数,请将该数各个位上数字反转得到一个新 数。新数也应满足整数的常见形式,即除非给定的原数 为零,否则反转后得到的新数的最高位数字不应为零 (如:输入-380,输出-83)。
统计单词个数 (noip2011普及组第二题)
输入格式
第1行为一个字符串,其中只含字母,表示给定单词; 第2行为一个字符串,其中只可能包含字母和空格, 表示给定的文章。
输出格式
只有一行,如果在文章中找到给定单词则输出两个整 数,两个整数之间用一个空格隔开,分别是单词在文 章中出现的次数和第一次出现的位置(即在文章中第 一次出现时,单词首字母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一 个整数-1。
比例简化 (noip2014普及组第二题)
输入格式 输入共一行,包含三个整数 A,B,L,每两个整
数之间用一个空格隔开,分别表示支持人数、反对 人数以及上限。 输出格式 输出共一行,包含两个整数 A’,B’,中间用一个 空格隔开,表示化简后的比例。 样例输入
1498 902 10 样例输出
螺旋方阵试题分析
本题首先让我们想到传统的模拟,从[1,1]开 始往数组中填充数字,但对于[30000,30000] 的数组,直接爆零。
对于读入的n, x, y,先判断(x,y)在第几圈, 再模拟圈内的数字。
螺旋方阵试题分析
如:n=4, (2,2)在第2圈,(3,1)在第1圈。 n=6,(4,5)在第2圈
现在给出n行m列的雷区中的地雷分布, 要 求计算出每个非地雷格周围的地雷格数。