NOIP2006提高组P

合集下载

历年noip普及组提高组试题分析

历年noip普及组提高组试题分析

历年NOIP(普及组)难度分析by Climber.pI
数学: 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 2006年普及组解题报告

NOIP 2006年普及组解题报告
using namespace std; int s[30001]; int main(int argc, char *argv[]) {
int i, j, n, m, v, w; cin >> n >> m; for ( i = 0 ; i < m ; i++ ) {
cin >> v >> w; for ( j = n ; j >= v ; j-- )
注 : 本 份 解 题 报 告 的 参 考 答 案 均 采 用 G++ 编 译 器 通 过 , 并 已 经 在 /JudgeOnline中测试通过,欢迎大家在在线测评中提交检测,如遇到
问题可到:北京市科协网站的在线交流(/bjnoi/)或到作者的交流 论坛的相应板块中提交。输入输出形式,采用的均为标准输入输出, 如果需要针对竞赛,请更改为相应的文件操作即可。
if (st[i] != z[t - (w - 1) + i]) {
f = false; break; } if ( f ) return; i= 0; while (st[w - i - 1] == z[t - i]) i++; st[w - i - 1]++; c = st[w - i - 1]; for (x = 1 , j = w - i ; j < w ; j++ , x++) st[j] = c + x; } int main(int argc, char *argv[]) { char st[28] , *str; char str1[28]; int i, j, k; cin >> s >> t >> w; cin >> st; str = st; for ( i = 0 ; i < 5 ; i++ ) { strcpy(str1 , str); pre(str); if ( strcmp(str1 , str) != 0) cout << str << endl; else break; } //system("PAUSE"); return EXIT_SUCCESS; } 四、数列 没有想到最后一道题会这么简单,看到题目以后,看到数列首先有些困惑,但是,括 号里的内容,却让思路豁然开朗。这个表达式,明显的表现出了,加法算式的部分选择,这 种情况很正常的想到了 2 进制的 01 转化后和加法算式部分的乘积后的结果。而且,仔细观 察在这道题目中,我们甚至不用生成 2 进制的 01 形式,只需要将 N 转化成为 2 进制就可以 了。可以说,真的是不能够再简单了。

NOIP2006提高组复赛解题报告

NOIP2006提高组复赛解题报告

1、DP,f表示合并区间内的珠子获得最大能源2、DP,可以先把主件和附件的搭配全部分出来,然后分阶段做背包3、模拟4、递推+高精度1.这题具有最优子结构的性质,与合并石子相似,所以可以用动态规划来做。

首先将数据存于c数组中,每次需要枚举一下起始点i和终点j的位置,还要枚举起点和终点之间一个断点k的位置,表示第i—k个珠子已经合并在了一起,第k—j个珠子也已经合并在了一起,当前要合并的是这两个已经合并在了一起的小珠子,这样就把一个问题分成了许多子问题。

当前一次操作所产生的能量K=c[i]*c[k]*c[j]具体做法是:开一个二维数组a,a[i,j]表示从i开始到j结束这一段中所有珠子合并所能产生的能量的最大值。

然后先枚举段的长度i(i为2到N),接着枚举开始位置j,由i, j 可推出结束位置k。

然后枚举断点位置v,v为j+1到k-1之间。

在每个断点处断开所能获得的能量为K=c[j]*c[v]*c[k]+a[j,v]+a[v,k]。

取这中间的一个最大值赋给a[j , k]。

这样做的时间复杂度为O(n3),因为N<=100,所以时间上肯定没有问题。

最后a[i,i]的最大值就是合并所有珠子后所能产生的能量的最大值。

constmaxn=100;varc:array[0..maxn] of longint;a:array[0..maxn,0..maxn] of longint;n,i,j,k,t,v,u,max:longint;beginassign(input,'energy.in'); reset(input);assign(output,'energy.out'); rewrite(output);readln(n);for i:=0 to n-1 do read(c[i]);fillchar(a,sizeof(a),0);for i:=2 to n do beginfor j:=0 to n-1 do begink:=(j+i) mod n;max:=0;for v:=j+1 to j+i-1 do beginu:=v mod n;t:=c[j]*c[u]*c[k]+a[j,u]+a[u,k];if t>max then max:=t;end;a[j,k]:=max;end;end;max:=0;for i:=0 to n-1 doif a[i,i]>max then max:=a[i,i];writeln(max);close(input); close(output)end.2、此题初看MS是01背包问题,只是多了附件这个条件。

1999年至2013年历年信息学奥赛提高组初赛答案

1999年至2013年历年信息学奥赛提高组初赛答案

NOIP2013第十九届全国青少年信息学奥林匹克联赛初赛(提高组)试题解析一、单选题(15*1.5)1、A,一个字节有8个bit,32位整型变量占用4个字节,故选A。

2、A,二进制11.01转为十进制,(11.01)2 = 1*2+1+0*0.5+1*0.25 = (3.25)10 。

3、B,老和尚给小和尚讲的故事里边有故事本身,递归是函数内部调用函数本身,故选B,递归。

4、D,香农信息论鼻祖。

5、A,一定是满二叉树时拥有2个字节点的节点数最多,最下一层会有2013-1023=990个节点,于是倒数第二层会有990/2=495个节点有2个字节点,从第1层到倒数第三层共有1023-2^9=511个节点,且这些节点都是用2个子节点的节点,所以共有495+511=1006个,选A。

6、B,要使图不联通,只要其中某一个节点不连通即可,所有顶点度最少是3,所以最少需要删除3条边,选B。

7、D,此题最开始一眼扫到的时候脑子进水,跟学生将选B,O(n),实际上不是,计算F1需要1次,计算F2需要一次,计算Fn需要计算F(n-1)的次数加上F (n-2)的次数,所以其实就是计算Fn次,于是答案选择D,至于这个Fn到底是多大,数学上可以计算,它等于O(((1+sqrt(5))/2)^n).8、B,这个必须是B,没有什么好说的,中序遍历保证左边都是小于根的,右边都是大于根的,所以可以保证是一个有序序列。

9、D,A项6和17对11取余都是6发生冲突,B项10的平方和17的平方对11取余都是1发生冲突,C项6的两倍和17的两倍对11取余都是1发生冲突,D项分别为1,2,3,4,不冲突。

10、D,IPV6地址是128位的。

谢谢网友指正!11、C,二分为6个和6个的顶点,此时边最多,有36条边。

12、B,我的学生几乎全选A去了,因为之前讲题只介绍过ASCII码,但是看到统一二字也应该想到Uni...前缀啊。

13、D,64位非零浮点数强制转换成32位浮点数,两个数会有大小上的细微差别,但不会发生符号变化,因为有专门的符号位。

NOIP2006年题解解读

NOIP2006年题解解读

金明的预算方案
输入输出要求



【输入文件】 输入文件budget.in 的第1行,为两个正整数,用一个空格隔开: N m (其中N(<32000)表示总钱数,m(<60)为希望购买物品 的个数。) 从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据, 每行有3个非负整数 v p q (其中v表示该物品的价格(v<10000),p表示该物品的重要 度(1~5),q表示该物品是主件还是附件。如果q=0,表示该 物品为主件,如果q>0,表示该物品为附件,q是所属主件的 编号) 【输出文件】 输出文件budget.out只有一个正整数,为不超过总钱数的物品 的价格与重要度乘积的总和的最大值(<200000)。
2 3 4 5 6
i>=2,即对前i件物品,花费不超过k(0<=k<=10),价
7
8
9
10
1
2 3 4 5
0
0
0
0
0
0
0
0
0
0
0
0
16
16
16
If k>=w[i] then {第i件物品可要可不要, 不要 a[i,k]:=a[i-1,k]; 要 a[i,k]:=a[i-1,k-w[i]]+w[i]*v[i]} a[i,k]:=max(a[i-1,k], a[i-1,k-w[i]]+w[i]*v[i])
0 1 2 3 4 5 0 0 1 0 0 2 0 0 3 0 0 4 0 ? 5 0 6 0 7 0 8 16 9 16 10 16
W 8 4 3 4 2 V 2 5 5en {第i件物品可要可不要, 不要 a[2-1,4]=a[1,4]=0; 要 a[2-1,4-w[2]]+w[2]*v[2]=a[1,0]+4*5=20} max(a[2-1,k], a[2-1,k-w[2]]+w[2]*v[2])=max(0,20)

noip提高组复赛知识点

noip提高组复赛知识点

Noip提高组复赛知识点1. 简介NOIP(National Olympiad in Informatics in Provinces)是中国计算机学会主办的全国性计算机竞赛。

它分为初赛和复赛两个阶段,复赛则进一步分为提高组和普及组。

本文将重点介绍NOIP提高组复赛的知识点。

2. 复赛知识点2.1 数据结构在NOIP提高组复赛中,对数据结构的理解和应用是非常重要的。

以下是一些常见的数据结构及其应用:2.1.1 数组数组是一种线性数据结构,可以在O(1)的时间复杂度内访问任意位置的元素。

在复赛中,经常需要使用数组来解决一些简单的问题,如统计字符出现次数、记录中间结果等。

2.1.2 链表链表是一种动态数据结构,它通过指针将多个节点连接起来。

在复赛中,链表常常用于实现一些特定的数据结构,如队列、栈等。

2.1.3 栈和队列栈和队列是两种基本的数据结构。

栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。

它们在复赛中的应用非常广泛,如深度优先搜索(DFS)和广度优先搜索(BFS)等算法中常常使用栈和队列来辅助实现。

2.1.4 树和图树和图是两种重要的非线性数据结构。

树是一种层次结构,图是一种由节点和边组成的网络结构。

在复赛中,树和图常常用于解决一些复杂的问题,如最短路径、最小生成树等。

2.2 算法和技巧在NOIP提高组复赛中,算法和技巧的掌握是至关重要的。

以下是一些常见的算法和技巧:2.2.1 动态规划动态规划是一种将复杂问题分解成简单子问题的方法,通过保存子问题的解来避免重复计算。

在复赛中,动态规划常常用于解决一些涉及最优化问题的算法。

2.2.2 贪心算法贪心算法是一种每一步都选择当前最优解的算法。

在复赛中,贪心算法常常用于解决一些涉及最优解问题的算法,如最小生成树问题、最短路径问题等。

2.2.3 搜索算法搜索算法是一种通过遍历问题的所有可能解空间来寻找解的方法。

在复赛中,搜索算法常常用于解决一些复杂的问题,如深度优先搜索(DFS)、广度优先搜索(BFS)等。

noip复习资料(提高组c++版)

noip复习资料(提高组c++版)

NOIP复习资料(C++版)主编葫芦岛市一高中李思洋完成日期2012年8月27日前言有一天,我整理了NOIP的笔记,并收集了一些经典算法。

不过我感觉到笔记比较凌乱,并且有很多需要修改和补充的内容,于是我又搜集一些资料,包括一些经典习题,在几个月的时间内编写出了《NOIP复习资料》。

由于急于在假期之前打印出来并分发给同校同学(我们学校既没有竞赛班,又没有懂竞赛的老师。

我们大家都是自学党),《NOIP复习资料》有很多的错误,还有一些想收录而未收录的内容。

在“减负”的背景下,暑期放了四十多天的假。

于是我又有机会认真地修订《NOIP复习资料》。

我编写资料的目的有两个:总结我学过(包括没学会)的算法、数据结构等知识;与同学共享NOIP知识,同时使我和大家的RP++。

大家要清醒地认识到,《NOIP复习资料》页数多,是因为程序代码占了很大篇幅。

这里的内容只是信息学的皮毛。

对于我们来说,未来学习的路还很漫长。

基本假设作为自学党,大家应该具有以下知识和能力:①能够熟练地运用C++语言编写程序(或熟练地把C++语言“翻译”成Pascal语言);②能够阅读代码,理解代码含义,并尝试运用;③对各种算法和数据结构有一定了解,熟悉相关的概念;④学习了高中数学的算法、数列、计数原理,对初等数论有一些了解;⑤有较强的自学能力。

代码约定N、M、MAX、INF是事先定义好的常数(不会在代码中再次定义,除非代码是完整的程序)。

N、M、MAX 针对数据规模而言,比实际最大数据规模大;INF针对取值而言,是一个非常大,但又与int的最大值有一定差距的数,如100000000。

对于不同程序,数组下标的下限也是不同的,有的程序是0,有的程序是1。

阅读程序时要注意。

阅读顺序和方法没听说过NOIP,或对NOIP不甚了解的同学,应该先阅读附录E,以加强对竞赛的了解。

如果不能顺利通过初赛,你就应该先补习初赛知识。

这本《NOIP复习资料》总结的是复赛知识。

第十二届全国青少年信息学奥林匹克联赛(NOIP2006)复赛...

第十二届全国青少年信息学奥林匹克联赛(NOIP2006)复赛...
初二
PASCAL
张志强
白云松

东莞翰林实验学校
初二
PASCAL
殷新泉
徐昊

东莞东华初级中学
初一
PASCAL
姚春
2、提高组
获奖等次
姓名
性别
就读学校
年级
参赛语言
辅导老师
市一等奖
市一等奖
郑石真

东莞市东莞中学
高二
PASCAL
唐章辉
王力

东莞市东莞中学
高二
PASCAL
唐章辉
刘柱彬

东莞市东莞中学
高三
PASCAL
徐建刚
梁俊杰

东莞东方明珠学校
高二
PASCAL
王斌
市二等奖
钱程

东莞市东莞中学
高一
PASCAL
唐章辉
刘泽民

东莞市东莞中学
高二
PASCAL
唐章辉
陈立好

常平新星学校
高二
C
何学芳
李志扬

东莞市东莞中学
高三
PASCAL
徐建刚
邱雁卿

东莞新世纪英才学校
高二
PASCAL
卓明聪
陈阳

东莞市东莞中学
高一
PASCAL
三等奖
张树平

广东东莞市东莞中学
高三
廖玉能
三等奖
陈柱源

广东东莞市东莞中学
高二
唐章辉
3、优秀辅导教师奖
东莞中学
唐章辉、廖玉能、徐建刚
东方明珠学校
王斌

NOIP2006提高组初赛试题_C++含答案

NOIP2006提高组初赛试题_C++含答案
if( ① ) {for(i=k;i<=n;i++) {count++; t=a[k]; a[k]=a[i]; a[i]=t; for( ② ) cout<<setw(1)<<a[p]; cout <<" "; t=a[k];a[k]=a[i];a[i]=t; if(count%5==0) cout <<endl; } return; }
3
四.阅读程序写结果(共 4 题,每题 8 分,共计 32 分) 1. #include <iostream.h>
void main() {int i,u[4],v[4],x,y=10;
for(i=0;i<=3;i++) cin >>u[i];
v[0]=(u[0]+u[1]+u[2]+u[3])/7; v[1]=u[0]/((u[1]-u[2])/u[3]); v[2]=u[0]*u[1]/u[2]*u[3]; v[3]=v[0]*v[1]; x=(v[0]+v[1]+2)-u[(v[3]+3)%4]; if(x>10)
严谨求实的作风,既要努力奋进,又要胜不骄败不馁
三.问题求解(共 2 题,每题 5 分,共计 10 分)
1.将 2006 个人分成若干不相交的子集,每个子集至少有 3 个人,并且: (1)在每个子集中,没有人认识该子集的所有人。 (2)同一子集的任何 3 个人中,至少有 2 个人互不认识。 (3)对同一子集中任何 2 个不相识的人,在该子集中恰好只有 1 个人认识这两个人。 则满足上述条件的子集最多能有___________个?

历年NOIP(普及组提高组)试题难度列表

历年NOIP(普及组提高组)试题难度列表

历年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试题汇总

2002年全国青少年信息学(计算机)奥林匹克分区联赛复赛试题题一级数求和(存盘名:NOIPC1)[问题描述]:已知:Sn= 1+1/2+1/3+…+1/n。

显然对于任意一个整数K,当n足够大的时候,Sn大于K。

现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。

[输入]键盘输入 k[输出]屏幕输出 n[输入输出样例]输人:1输出:2题二选数(存盘名:NOIPC2)[问题描述]:已知 n 个整数x1,x2,…,xn,以及一个整数 k(k<n)。

从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。

例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为:3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。

现在,要求你计算出和为素数共有多少种。

例如上例,只有一种的和为素数:3+7+19=29)。

[输入]:键盘输入,格式为:n , k (1<=n<=20,k<n)x1,x2,…,xn (1<=xi<=5000000)[输出]:屏幕输出,格式为:一个整数(满足条件的种数)。

[输入输出样例]:输入:4 33 7 12 19输出:1题三产生数(存盘名:NOIPC3)[问题描述]:给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。

规则:一位数可变换成另一个一位数:规则的右部不能为零。

例如:n=234。

有规则(k=2):2-> 53-> 6上面的整数 234 经过变换后可能产生出的整数为(包括原数): 234534264564共 4 种不同的产生数问题:给出一个整数 n 和 k 个规则。

求出:经过任意次的变换(0次或多次),能产生出多少个不同整数。

仅要求输出个数。

[输入]:键盘输人,格式为:n kx1 y1x2 y2... ...xn yn[输出]:屏幕输出,格式为:一个整数(满足条件的个数):[输入输出样例]:输入:234 22 53 6输出:4题四过河卒(存盘名:NOIPC4)[问题描述]:如图,A 点有一个过河卒,需要走到目标 B 点。

NOIP2006初赛试题及答案(提高组)

NOIP2006初赛试题及答案(提高组)

NOIP2006初赛试题(提高组Pascal语言)[日期:2006-10-25] 来源:作者:[字体:大中小]第十二届全国青少年信息学奥林匹克联赛初赛试题(提高组Pascal 语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共10 题,每题1.5 分,共计15 分。

每题有且仅有一个正确答案.)。

1. 在以下各项中。

()不是CPU 的组成部分。

A. 控制器B. 运算器C. 寄存器D. ALUE. RAM2. BIOS(基本输入输出系统)是一组固化在计算机内()上一个ROM 芯片上的程序。

A. 控制器B. CPUC. 主板D. 内存条E. 硬盘3.在下面各世界顶级的奖项中,为计算机科学与技术领域作出杰出贡献的科学家设立的奖项是()。

A. 沃尔夫奖B. 诺贝尔奖C. 菲尔兹奖D. 图灵奖E. 南丁格尔奖4.在编程时(使用任一种高级语言,不一定是Pascal),如果需要从磁盘文件中输入一个很大的二维数组(例如1000*1000 的double 型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上()。

A. 没有区别B. 有一些区别,但机器处理速度很快,可忽略不计C. 按行读的方式要高一些D. 按列读的方式要高一些E.取决于数组的存储方式。

5.在Pascal 语言中,表达式(21 xor 2)的值是()A. 441B. 42C.23D.24E.256.在Pascal 语言中,判断a不等于0且b不等于0的正确的条件表达式是()A. not a=0 or not b=0B. not((a=0)and(b=0))C. not(a=0 and b=0)D. (a<>0)or(b<>0)E. (a<>0)and (b<>0)7.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。

已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。

NOIP历年复赛提高组试题.

NOIP历年复赛提高组试题.

第十届全国信息学奥林匹克分区联赛(NOIP2004)复赛试题(提高组竞赛用时:3小时)1、津津的储蓄计划(Save.pas/dpr/c/cpp)【问题描述】津津的零花钱一直都是自己管理。

每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。

因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如11月初津津手中还有83元,妈妈给了津津300元。

津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。

到了11月月末,津津手中会剩下3元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。

有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。

如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。

如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。

【输入文件】输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。

【输出文件】输出文件save.out包括一行,这一行只包含一个整数。

如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。

【样例输入1】29023028020030017034050908020060【样例输出1】-7【样例输入2】29023028020030017033050908020060【样例输出2】1580【问题描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。

noip2006提高组解题报告及源程序

noip2006提高组解题报告及源程序

NOIP2006 Solutions2006届中国信息学奥林匹克联赛提高组解题报告by FaLLeNs问题一能量项链/Energy核心算法动态规划(原型石子合并问题)时间复杂度O(n3)空间复杂度O(n2)编码复杂度<50行实测时间<0.1s分析记head[i]为第i颗能量珠的首标记,也同时是它前面那颗能量珠的尾标记。

记录Energy[i,j]为从以Head[i]为首标记的能量珠开始顺时针数到以Head[j]为尾标记的能量珠为止所有能量珠组成的串合并后放出的最大能量。

那么对于Energy[i,j],若先合并从以Head[i]为首标记的能量珠开始顺时针数到以Head[k]为尾标记的能量珠为止的串,在合并以Head[k]为首标记的能量珠开始顺时针数到以Head[j]为尾标记的能量珠为止的串,然后将这两颗合并后的能量珠合并,放出的能量为Energy[i,k]+Energy[k,j]+Head[i]*Head[k]*Head[j]。

也就是说,状态转移方程为Energy[i,j]=Max{Energy[i,k]+Energy[k,j]+Head[i]*Head[k]*Head[j]} (i<=k<=j (i<j), k<i or k>j (i>=j))。

计算Energy[i,j]时,只会用到含有能量珠数目比它少的串在数组中的值,所以可以以串的能量珠数目为顺序规划,即按照k|(k+i) mod n=j的顺序进行规划。

评论如果枚举将能量项链变为串的开链位置,需要约n/2倍计算量,得到一个O(n4)的时间复杂度。

这是不需要的。

一个较优的贪心近似算法是每次找首标记最小的能量珠与它前面的能量珠合并。

对于NOIP中30%数据是正确的。

一个典型的反例是n=4,Head={10,3,2,3},贪心算法得到3*2*3+10*3*3+10*10*3=408,而最优解为10*3*2+10*2*3+10*10*3=420。

NOIP2006提高组digital2k进制数

NOIP2006提高组digital2k进制数

设r是个2k进制数,并满足以下条件:(1)r至少是个2位的2k进制数。

(2)作为2k进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位。

(3)将r转换为2进制数q后,则q的总位数不超过w。

在这里,正整数k(1≤k≤9)和w(k<w≤30,000)是事先给定的。

问:满足上述条件的不同的r共有多少个?我们再从另一角度作些解释:设S是长度为w 的01字符串(即字符串S由w个“0”或“1”组成),S对应于上述条件(3)中的q。

将S从右起划分为若干个长度为k 的段,每段对应一位2k进制的数,如果S至少可分成2段,则S所对应的二进制数又可以转换为上述的2k进制数r。

例:设k=3,w=7。

则r是个八进制数(23=8)。

由于w=7,长度为7的01字符串按3位一段分,可分为3段(即1,3,3,左边第一段只有一个二进制位),则满足条件的八进制数有:2位数:高位为1:6个(即12,13,14,15,16,17),高位为2:5个,…,高位为6:1个(即67)。

共6+5+…+1=21个。

3位数:高位只能是1,第2位为2:5个(即123,124,125,126,127),第2位为3:4个,…,第2位为6:1个(即167)。

共5+4+…+1=15个。

所以,满足要求的r共有36个。

输入文件输入只有1行,为两个正整数,用一个空格隔开:k,W。

输出文件输出1行一个正整数,为所求的计算结果,即满足条件的不同的r的个数(用十进制数表示),要求最高位不得为0,各数字之间不得插入数字以外的其他字符(例如空格、换行符、逗号等)。

提示:作为结果的正整数可能很大,但不会超过200位输入输出样例digital.in3 7digital.out36记q=2k -1,q 是2k 进制数的不为0的数字的个数。

1. 当w ≤k 时,不同的R 的个数为0(小于两位数)。

2. 当w ≥kq 时,不同的R 的个数为2q-(q+1)。

即)C C (2C ...C C C 1q 0q q q q 4q 3q 2q +-=++++ 实际上,当w ≥k(q-1)时,不同的R 的个数为2q -(q+1)。

NOIp 2006 提高组 4 2^k进制数-凑数(生成)

NOIp 2006 提高组 4 2^k进制数-凑数(生成)

NOIp 2006 提高组 4 2^k进制数这题我以前写过的,现在就当是再温习一遍吧,思路就是递推(也就是动态规划)根据一个公式推导出来的DP方程,首先我用f[i][j]表示第i位数以j开头的数字共有多少个,那么最容易得到的一个转移方程是: f[i][j] = f[i - 1][j + 1] + f[i - 1][j + 2] + ....... + f[i - 1][n - 1] + f[i - 1][n]. 但是这个方程给我们的感觉就是一个字——太慢了,为什么这么慢呢?因为它就是这么慢,要把所有的一个个相加一次,但是注意到上面我画红的部分!就是用这个公式,这部分能够表示成啥?很简单啊: f[i][j + 1] = f[i - 1][j + 2] + ....... + f[i - 1][n - 1] + f[i - 1][n]. 那么智商高一点的人就看到玄机了,能够把f[i][j]简化成如下的形式: f[i][j] = f[i][j + 1] + f[i - 1][j + 1] 如此一来程序就清晰多了,代码也很好写,要注意的是搜索时j是从后向前搜索,我还是使用面向对象的思想,先封装了一套int类型的,然后再修改成高精度类型的,int类型的(40分)如下:#include <stdio.h>typedef int num;num f[61][513];num ans;void give(num *a, int b){*a = b;}void add(num *a, num *b){*a += *b;}void output(num *a){printf("%d", *a);}int main(void){int i, j;int n, s, k, t, l;scanf("%d%d", &s, &n);k = 1 << s;for(i = 0; i < k; i++){give(&f[0][i], 1);}t = n / s;for(i = 1; i <= t; i++){for(j = k - i - 1; j >= 1; j--){add(&f[i][j], &f[i][j + 1]); add(&f[i][j], &f[i - 1][j + 1]);}}for(i = 1; i < t; i++){for(j = k - i - 1; j >= 1; j--){add(&ans, &f[i][j]);}}l = n - t * s;if(l == 0){l = k;}else{l = 1 << l;}for(i = 1; i < l; i++){add(&ans, &f[t][i]);}output(&ans);printf("\n");return 0;} 详细修改了一番之后,发现主函数中错了,后来详细修改了一番,弄得我以为高精度写错了,仔细检查之后发现两个地方错了,第一个是数组开小了,本来是num f[61][513],后来发现要使用f[513] [513],再一个就是不能够直接使用用(n - 1)/s,因为如果用30000/1(k = 1, w = 30000)的话那数组又会显得小了,需要f[30000][513],但是实际上又跟本用不到(因为k很小时最多只有! ((1 << k) - 1)种情况,那样的情况很少)。

NOIP2006提高组复赛命题与解题报告(免费)

NOIP2006提高组复赛命题与解题报告(免费)

NOIP2006提高组复赛命题与解题报告1.能量项链(energy.pas/c/cpp)【问题描述】在Mars 星球上,每个Mars 人都随身佩带着一串能量项链。

在项链上有N 颗能量珠。

能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。

并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。

因为只有这样,通过吸盘(吸盘是Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。

如果前一颗能量珠的头标记为m ,尾标记为r ,后一颗能量珠的头标记为r ,尾标记为n ,则聚合后释放的能量为n r m ⨯⨯(Mars 单位),新产生的珠子的头标记为m ,尾标记为n 。

需要时,Mars 人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。

显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。

例如:设N=4,4颗珠子的头标记与尾标记依次为(2,3) (3,5) (5,10) (10,2)。

我们用记号⊕表示两颗珠子的聚合操作,(j ⊕k)表示第j ,k 两颗珠子聚合后所释放的能量。

则第4、1两颗珠子聚合后释放的能量为:(4⊕1)=10*2*3=60。

这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 ((4⊕1)⊕2)⊕3)=10*2*3+10*3*5+10*5*10=710。

【算法说明】这是根据矩阵连乘问题改编的,是一个典型的动态规划问题。

原线性结构改为环状结构,数组扩大一倍(不使用求余方法),比原题略难一些。

矩阵连乘问题是这样描述的:给定n 个矩阵 n A A A A ,,,,321 ,每个相邻的矩阵都是可乘的,即前一个矩阵的列数等于后一个矩阵的行数。

考察这n 个矩阵的连乘积n A A A A ⨯⨯⨯⨯ 321 ,由于矩阵乘法满足结合律,所以计算矩阵的连乘可以有许多不同的计算次序。

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

第十二届全国青少年信息学奥林匹克联赛初赛试题(提高组Pascal 语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、单项选择题(共10题,每题1.5分,共计15分。

每题有且仅有一个正确答案.)。

1. 在以下各项中。

()不是CPU的组成部分。

A. 控制器B. 运算器C. 寄存器D. ALUE. RAM2. BIOS(基本输入输出系统)是一组固化在计算机内()上一个ROM芯片上的程序。

A. 控制器B. CPUC. 主板D. 内存条E. 硬盘3. 在下面各世界顶级的奖项中,为计算机科学与技术领域作出杰出贡献的科学家设立的奖项是()。

A. 沃尔夫奖B. 诺贝尔奖C. 菲尔兹奖D. 图灵奖E. 南丁格尔奖4.在编程时(使用任一种高级语言,不一定是Pascal),如果需要从磁盘文件中输入一个很大的二维数组(例如1000*1000的double型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上()。

A. 没有区别B. 有一些区别,但机器处理速度很快,可忽略不计C. 按行读的方式要高一些D. 按列读的方式要高一些E. 取决于数组的存储方式。

5.在Pascal语言中,表达式(21 xor 2)的值是()A. 441B. 42C.23D.24E.256.在Pascal语言中,判断a不等于0且b不等于0的正确的条件表达式是()A. not a=0 or not b=0B. not((a=0)and(b=0))C. not(a=0 and b=0)D. (a<>0)or(b<>0)E. (a<>0)and (b<>0)7.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。

已知某时刻该车站状态为空,从这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。

假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为()。

A. 1, 2, 3, 4, 5B. 1, 2, 4, 5, 7C. 1, 4, 3, 7, 6D. 1, 4, 3, 7, 2E. 1, 4, 3, 7, 58.高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。

在这里,树高等于叶结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为()。

A. 10B. 11C. 12D. 13E. 210 – 19. 与十进制数1770.625 对应的八进制数是()。

A. 3352.5B. 3350.5C. 3352.1161D. 3350.1151E. 前4个答案都不对10.将5个数的序列排序,不论原先的顺序如何,最少都可以通过()次比较,完成从小到大的排序。

A. 6B. 7C. 8D. 9E. 10二、不定项选择题(共10题,每题1.5分,共计15分。

每题正确答案的个数大于或等于1。

多选或少选均不得分)。

11. 设A=B=D=true,C=E=false,以下逻辑运算表达式值为真的有()。

A. (A∧B)∨(C∧D)∨.EB. ..(((A∧B)∨C)∧D∧E)C. A∧(B∨C∨D∨E)D. (A∧(B∨C)) ∧D∧E12. (2010)16 + (32)8的结果是()。

A. (8234)10B. (202A)16C. (100000000110)2D. (2042)1613. 设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有()。

A. a, b, c, e, dB. b, c, a, e, dC. a, e, c, b, dD. d, c, e, b, a14. 已知6个结点的二叉树的先根遍历是1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是3 2 5 6 4 1,则该二叉树的可能的中根遍历是()A. 3 2 1 4 6 5B. 3 2 1 5 4 6C. 2 3 1 5 4 6D. 2 3 1 4 6 515. 在下列各数据库系统软件中,以关系型数据库为主体结构的是()。

A. ACCESSB. SQL ServerC. OracleD. Foxpro16.在下列各软件中,属于NOIP竞赛(复赛)推荐使用的语言环境有()。

A. gcc/g++B. Turbo PascalC. Turbo CD. free pascal17. 以下断电之后将不能保存数据的有()。

A. 硬盘B. ROMC. 显存D. RAM18. 在下列关于计算机语言的说法中,正确的有()。

A. Pascal和C都是编译执行的高级语言B. 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上C. C++是历史上的第一个支持面向对象的计算机语言D. 高级语言比汇编语言更高级,是因为它的程序的运行效率更高19. 在下列关于计算机算法的说法中,正确的有()。

A. 一个正确的算法至少要有一个输入B. 算法的改进,在很大程度上推动了计算机科学与技术的进步C. 判断一个算法的好坏,主要依据它在某台计算机上具体实现时的运行时间D. 目前仍然存在许多涉及到国计民生的重大课题,还没有找到能够在计算机上实施的有效算法20. 在下列关于青少年信息学竞赛的说法中,你赞成的是()(本题不回答为0分,答题一律满分)。

A. 举行信息学竞赛的目的,是为了带动广大青少年学科学、爱科学,为造就一大批优秀的计算机科学与技术人才奠定良好的基础B. 如果竞赛优胜者不能直接保送上大学,我今后就不再参与这项活动了C. 准备竞赛无非要靠题海战术,为了取得好成绩,就得拼时间、拼体力D. 为了取得好成绩,不光要看智力因素,还要看非智力因素。

优秀选手应该有坚韧不拔的意志,有严谨求实的作风,既要努力奋进,又要胜不骄败不馁三.问题求解(共2题,每题5分,共计10分)1.将2006个人分成若干不相交的子集,每个子集至少有3个人,并且:(1)在每个子集中,没有人认识该子集的所有人。

(2)同一子集的任何3个人中,至少有2个人互不认识。

(3)对同一子集中任何2个不相识的人,在该子集中恰好只有1个人认识这两个人。

则满足上述条件的子集最多能有___________个?2.将边长为n的正三角形每边n等分,过每个分点分别做另外两边的平行线,得到若干个正三角形,我们称为小三角形。

正三角形的一条通路是一条连续的折线,起点是最上面的一个小三角形,终点是最下面一行位于中间的小三角形。

在通路中,只允许由一个小三角形走到另一个与其有公共边的且位于同一行或下一行的小三角形,并且每个小三角形不能经过两次或两次以上(图中是n=5时一条通路的例子)。

设n=10,则该正三角形的不同的通路的总数为_____________。

四.阅读程序写结果(共4题,每题8分,共计32分)1. Program ex401;varu,v:array[0..3] of integer;i,x,y:integer;beginx:=10; y:=10;for i:=0 to 3 doread(u[i]);v[0]:=(u[0]+u[1]+u[2]+u[3]) div 7;v[1]:=u[0] div ((u[1]-u[2]) div u[3]);v[2]:=u[0]*u[1] div u[2]*u[3];v[3]:=v[0]*v[1];x:=(v[0]+v[1]+2)-u[(v[3]+3) mod 4];if (x>10) theny:=y+(v[2]*100-v[3]) div (u[u[0] mod 3]*5)elsey:=y+20+(v[2]*100-v[3]) div (u[v[0] mod 3]*5);writeln (x,',',y);end. {*注:本例中,给定的输入数据可以避免分母为0或下标越界。

)输入:9 3 9 4输出:_______________2.Program ex402;constm:array[0..4] of integer=(2,3,5,7,13);vari,j:integer;t: longint;beginfor i:=0 to 4 dobegint:=1;for j:=1 to m[i]-1 do t:=t*2;t:=(t*2-1)*t;write (t,' ');end;writeln;end.输出:____________________3. Program ex403;Const NN=7;TypeArr1=array[0..30] of char;vars:arr1;k,p:integer;function fun1(s:arr1; a:char;n:integer):integer; varj:integer;beginj:=n;while (a<s[j])and(j>0) do dec(j);fun1:=j;end;Function fun2(s:arr1; a:char; n:integer):integer; varj:integer;beginj:=1;while (a>s[j])and(j<n) do inc(j);fun2:=j;end;beginfor k:=1 to NN dos[k]:=chr(ord('A')+2*k+1);k:=fun1(s,'M',NN)+fun2(s,'M',NN);writeln(k);end.输出:_____________4. program ex404;varx,x2:longint;procedure digit(n,m:longint);var n2:integer;beginif(m>0) thenbeginn2:=n mod 10;write(n2:2);if(m>1) then digit(n div 10,m div 10);n2:=n mod 10;write(n2:2);end;end;beginwriteln('Input a number:');readln(x);x2:=1;while(x2<x) do x2:=x2*10;x2:=x2 div 10;digit(x,x2);writeln;end.输入:9734526输出:______________________________五.完善程序(前5空,每空2分,后6空,每空3分,共28分)1.(选排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数中取k(1<=k<=n)个数的全部可能的排列(不一定按升序输出)。

相关文档
最新文档