noip2012初赛试题及答案
noip2012 解析
小结和问题
• 一个函数的三要素是定义域,值域和对应关系, 而通常,我们对值域、定义域的关注较少。这是在 数学和信息学中都要注意的。 考虑到全部可能的情况是模拟题的关键,如果漏 掉某一情况那么很可能这道题你就会爆0。。 细节!模拟的题目基本上都没有多大思考的难度, 但一旦你不注意细节,别人就和你拉开了差距。
Game p1432
• 思路:其实是一个很经典的贪心模型,但是加了恶心的 高精度。 • 可以看到即使交换相邻两个人的位置,前面所有人的左 手积也是不变的。如图*: 我们设n1前的左手积为S,则
求的是max(s/r1,s*l1/r2) ;A式
大臣编号:... n1 n2
交换n1,n2之后,max(s*r2,s*l2/r1);B式 若A<=B,则化简后推出:r1*l1<=r2*l2; 即左右手乘积小的,要放在前面,可保证max 最小
• 这样我们就得到公式m=c-k。 • 但是仅仅这样就完了么?m必须要大于等于0。而 当c<k时的情况可能出现么?
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1 2
0
1 2
1
2 3
2
3 4
3
4 5
4
5 6
5
6 7
6
7 8
7
8 9
8
9 ...
9
...
...
3
4 5 6 7 8
3
4 5 6 7 8
4
•
•
•
考场上实在做不出来就要爆搜或骗分,怎么搜?怎么 骗?提示:P13 的方案B可以试一下。建议学习《骗分 导论》。
NOIP2012初赛模拟试题
PS:双击获取文档。Ctrl+A,Ctrl+C,然后粘贴到word即可。 未能直接提供word版,抱歉。
D. 主板
C. 结构化查询语言
D. 结构化操纵语言
C.MHZ
D.MB
4.下面是关于微处理器 MPU 的描述,不正确的是( ) 。 A.微处理器是微型计算机的核心部件 B.微处理器是一块包含运算器和控制器的大规模集成电路芯片 C.微处理器的性能决定了微型计算机的档次 D.我们在购买微型计算机时,应该不断跟踪微处理器的更新 5. 某机字长 8 位,采用补码形式(其中 1 位为符号位) ,则机器数所能表示的范围是( ) 。 A.-127 ~ 127 B.-128 ~ +128 C.-128 ~ +127 D.-128 ~ +128 6. 某计算机字长 32 位,其存储容量为 4MB,若按半字编址,它的寻址范围是( A.0~1M B.0~2MB C.0~3M D.0~4MB ) 。
7.栈底至栈顶依次存放元素 A、B、C、D,在第五个元素 E 入栈前,栈中元素可以出栈,则出栈序列可能是( A. ABCED B. DBCEA C. CDABE D. DCBEA 8.冗余数据是指可以由其他数据导出的数据,下述关于数据库系统的叙述中正确的是( ) 。 A.数据库系统减少了数据冗余 B.数据库系统避免了一切冗余 C.数据库系统中数据的一致性是指数据类型的一致 D.数据库系统比文件系统能管理更多的数据 9.办公自动化(OA)是目前广泛开展的一项计算机应用,按分类,它应属于( A.实时控制 B. 科学计算 C. 数据处理 D.计算机辅助设计 10.结构化程序设计主要强调的是( ) A.程序的规模 B.程序的易读性 ) 。
)
C.程序的执行效率
NOIP2012第十八届普及组初赛题目c++
四、完善程序(前2空每空2分,后8空每空3分,共计28分)1.(坐标统计)输入n个整点在平面上的坐标。
对于每个点,可以控制所有位于它左下方的点(即x、y坐标都比它小),它可以控制的点的数目称为“战斗力”。
依次输出每个点的战斗力,最后输出战斗力最高的点的编号(如果若干个点的战斗力并列最高,输出其中最大的编号)。
#include <iostream>using namespace std;const int SIZE =100;int x[SIZE],y[SIZE],f[SIZE];int n,i,j,max_f,ans;int main(){cin>>n;for(i=1;i<=n;i++) cin>>x[i]>>y[i];max_f=0;for(i=1;i<=n;i++){f[i]= ① ;for(j=1;j<=n;j++){if(x[j]<x[i] && __②_____ )_____③ ;}if( __④_ ){max_f=f[i];____⑤___ ;}}for(i=1;i<=n;i++) cout<<f[i]<<endl;cout<<ans<<endl;return 0;}2.(排列数)输入两个正整数n,m(1<n<20,1<m<n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。
例如:输入:3 2输出:1 21 32 12 33 13 2#include <iostream>#include <cstring>using namespace std;const int SIZE =25;bool used[SIZE];int data[SIZE];int n,m,i,j,k;bool flag;int main(){cin>>n>>m;memset(used,false,sizeof(used));for(i=1;i<=m;i++){data[i]=i;used[i]=true;}flag=true;while(flag){for(i=1;i<=m-1;i++) cout<<data[i]<<" ";cout<<data[m]<<endl;flag= __①__ ;for(i=m;i>=1;i--){________②___________ ;for(j=data[i]+1;j<=n;j++)if(!used[j]){used[j]=true;data[i]= ___③__ ;flag=true;break;}if(flag){for(k=i+1;k<=m;k++)for(j=1;j<= ④ ;j++)if(!used[j]){data[k]=j;used[j]=true;break;}______⑤_____ ;}}}return 0;}。
NOIP提高组初赛历年试题及答案求解题篇(完整资料).doc
【最新整理,下载后即可编辑】NOIP提高组初赛历年试题及答案求解题篇问题求解题(每次2题,每题5分,共计10分。
每题全部答对得5分,没有部分分)注:答案在文末提高组的问题求解题的知识点大多涉及计数问题、鸽巢原理、容斥问题、逻辑推理、递推问题、排列组合问题等。
NOIP2011-1.平面图可以画在平面上,且它的边仅在顶点上才能相交的简单无向图。
4个顶点的平面图至少有6条边,如图所示。
那么,5个顶点的平面图至多有_________条边。
NOIP2011-2.定义一种字符串操作,一次可以将其中一个元素移到任意位置。
举例说明,对于字符串“BCA”可以将A移到B 之前,变字符串“ABC”。
如果要将字符串“DACHEBGIF”变成“ABCDEFGHI”最少需要_________次操作。
NOIP2012-1. 本题中,我们约定布尔表达式只能包含p,q, r三个布尔变量,以及“与”(∧)、“或”(∨)、“非”(¬)三种布尔运算。
如果无论p, q,r如何取值,两个布尔表达式的值总是相同,则称它们等价。
例如,(p∨q)∨r和p∨(q∨r)等价,p∨¬p 和q∨¬q 也等价;而p∨q 和p∧q不等价。
那么,两两不等价的布尔表达式最多有_________个。
NOIP2012-2. 对于一棵二叉树,独立集是指两两互不相邻的节点构成的集合。
例如,图1有5个不同的独立集(1个双点集合、3个单点集合、1个空集),图2有14个不同的独立集。
那么,图3有_________个不同的独立集。
NOIP2013-1. 某系统自称使用了一种防窃听的方式验证用户密码。
密码是n个数s1,s2,…,sn,均为0或1。
该系统每次随机生成n个数a1,a2,…,an,均为0或1,请用户回答(s1a1+s2a2+…+snan)除以2的余数。
如果多次的回答总是正确,即认为掌握密码。
该系统认为,即使问答的过程被泄露,也无助于破解密码——因为用户并没有直接发送密码。
[NOIP2012提高组]国王游戏
[NOIP2012提⾼组]国王游戏题⽬:洛⾕P1080、Vijos P1779、codevs1198。
题⽬⼤意:国王和每个⼤⾂左、右⼿各写了⼀个数。
规定每个⼤⾂得到的⾦币数为他前⾯所有⼈左⼿的数字的乘积除以他⾃⼰右⼿的数(向下取整),现在国王要改变⼤⾂的排列顺序,使得获得奖赏最多的⼤⾂,所获奖赏尽可能的少(国王永远站在最前⾯)。
解题思路:(贪⼼)⾸先,交换相邻两个⼤⾂只会对这两个⼤⾂造成影响,并不会对其他⼤⾂造成影响。
我们考虑⼤⾂i和i+1,设他们左⼿数字分别为A[i]和A[i+1],右⼿分别为B[i]和B[i+1],前i-1个⼤⾂和国王左⼿的数的乘积为S,且A[i]B[i]<=A[i+1]B[i+1]。
原来两个⼤⾂能得到的⾦币数分别为S/B[i],S*A[i]/B[i+1]。
如果交换,则第⼀个⼤⾂现在能得到S*A[i+1]/B[i],第⼆个能得到S/B[i+1]。
由于A[i]B[i]<=A[i+1]B[i+1],所以S*A[i]*B[i]<=S*A[i+1]*B[i+1],所以S*A[i]/B[i+1]<=S*A[i+1]/B[i]。
由此可得⼤⾂以A[i]B[i]从⼩到⼤排序,答案越⼩。
⽽S*A[i+1]/B[i]>=S/B[i],S*A[i]/B[i+1]>=S/B[i+1],故最⼤的答案为后⾯那个⼤⾂的,也保证了答案的正确性。
然后⾼精度⼀下就好了。
C++ Code:#include<cstdio>#include<cstring>#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;struct BigInteger {static const int BASE=100000000;static const int WIDTH=8;vector<long long>s;BigInteger(long long num=0){*this=num;}BigInteger operator = (long long num){s.clear();do{s.push_back(num%BASE);num/=BASE;} while(num>0);return *this;}BigInteger operator = (const string& str){s.clear();int x,len=(str.length()-1)/WIDTH+1;for(int i=0;i<len;i++){int end=str.length()-i*WIDTH;int start=max(0,end-WIDTH);sscanf(str.substr(start,end-start).c_str(),"%d",&x);s.push_back(x);}return *this;}BigInteger operator + (const BigInteger& b)const{BigInteger c;c.s.clear();for(int i=0,g=0;;i++){if(g==0&&i>=s.size()&&i>=b.s.size())break;int x=g;if(i<s.size())x+=s[i];if(i<b.s.size())x+=b.s[i];c.s.push_back(x%BASE);g=x/BASE;}return c;}bool operator < (const BigInteger& b)const{if(s.size()!=b.s.size())return s.size()<b.s.size();for(int i=s.size()-1;i>=0;i--)if(s[i]!=b.s[i])return s[i]<b.s[i];return false;}bool operator > (const BigInteger& b)const{return b<*this;}bool operator <= (const BigInteger& b)const{return !(b<*this);}bool operator >= (const BigInteger& b)const{return !(*this<b);}bool operator != (const BigInteger& b)const{return b<*this||*this<b;}bool operator == (const BigInteger& b)const{return !(b<*this)&&!(*this<b);}void cheng(int a){vector<long long>c;for(int i=0;i<s.size();++i){if(c.size()<=i)c.push_back(s[i]*a);elsec[i]+=s[i]*a;if(c[i]/BASE)if(c.size()<=i+1)c.push_back(c[i]/BASE);elsec[i+1]=c[i]/BASE;c[i]%=BASE;}s=c;}void chu(int a){vector<long long>c(s);if(s.back()/a)c[s.size()-1]=s.back()/a,s[s.size()-1]%=a;elsec.pop_back();for(int i=s.size()-2;i>=0;--i){long long num=s[i+1]*BASE+s[i];c[i]=num/a;num%=a;s[i]=num;}s=c;}};ostream& operator << (ostream &out,const BigInteger& x){out<<x.s.back();for(int i=x.s.size()-2;i>=0;i--){char buf[20];sprintf(buf,"%08d",x.s[i]);for(int j=0;j<strlen(buf);j++)out<<buf[j];}return out;}istream& operator >> (istream &in,BigInteger& x){string s;if(!(in>>s))return in;x=s;return in;}struct DC{int a,b;bool operator < (const DC&rhs)const{return a*b<rhs.a*rhs.b;} }p[1005];int n;BigInteger sum,Div,ans;int main(){ios::sync_with_stdio(false);cin>>n;for(int i=0;i<=n;++i)cin>>p[i].a>>p[i].b;sort(p+1,p+n+1);sum=ans=p[0].a;for(int i=1;i<=n;++i){Div=sum;Div.chu(p[i].b);if(ans<Div)ans=Div;sum.cheng(p[i].a);}cout<<ans<<endl;return 0;}。
NOIP2012初赛模拟试题(6)
NOIP2012初赛模拟试题(六)●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一、选择题(共20题,每题1.5分,共计30分)。
1、以下不属于CPU 的组成部件是()A.控制器B.运算器C.寄存器D.高速缓存2、与十进制数2011.625对应的八进制数是()A.3733.625B.3733.5C.3352.1161D.前三个都不对3、将5个数的序列排序,不论原先的顺序如何,最少可以通过()次比较,完成从小到大的排序。
A.6B.7C.8D.94、完全二叉树的结点个数为20,它的叶子结点个数为()A.7B.8C.9D.105、128.8.0.1 属于()A.A 类地址B.B 类地址C.C 类地址D.D 类地址6、使用E-mail 时,接收和发送电子邮件的服务器分别称为()服务器和()服务器A.POP3 SMTPB.SMTP POP3C.HTTP FTPD.FTP HTTP7、不能在Linux上使用的网页浏览器是()A.Internet ExplorescapeC.OperaD.FirefoxE.Mozilla8、二叉树T,已知其前序遍历序列为1243576,中序遍历序列为4215736,则其后序遍历序列为()A.4257631B.4275361C.4275631D.47235619、设有一组关键字{19,1,23,14,55,20,84,27,68,11,10,77},采用哈希函数h(key)=key%13,并采用开放地址的二次再散列方法解决冲突,在0-18的散列地址空间中队该关键字序列构造哈希表,则27的地址为( )。
A. 0B. 1C. 2D. 310、非空的循环单链表head 的尾结点(由p 所指向)满足()A. p>next=NULLB. p=NULLC.p>next=headD. p=head11、设A=true,B=false ,C=false,D=true,以下逻辑运算表达式值为真的有()A.(A∧B)∨(C∧D)B.((A∧B)∨C)∧DC.A∧((B∨C)∨D)D.(A∧(B∨C)) ∧DE.(A∧B)∧( C∨D)12、一个栈的入栈序列是1,2,3,4,…,n,其出栈序列为p1,p2,p3…pn,若p1=n,则pi 为()A.i B .n=i C.n-i+1 D.不确定13、下列不属于冯•诺依曼计算机模型的核心思想是()A.采用二进制表示数据和指令B.采用“存储程序”工作方式C.计算机硬件有五大部件D.结构化程序设计方法14、下列逻辑运算不正确的是()。
NOIP2012信息学奥林匹克竞赛初赛-模拟卷
2012年全国青少年信息学奥林匹克联赛初赛模拟试题一.单项选择题(共10题,每题1.5分,共计15分,每题有且仅有一个正确答案。
)1、以下说法正确的是()A、第一个提出“goto语句有害论”的计算机科学家是Donald E.KnuthB、被誉为“迄今最伟大的计算机程序员、算法学家”的是Edsger Wybe DijkstraC、世界上第一位程序员是V on NoumaD、被誉为“计算机语言之母”的是Grace Hopper2、关于CPU的说法正确的是()A、计算机的运算速度取决于给定的时间内,它的处理器所能处理的数据量。
B、64位计算机指的是CPU每秒钟可处理的数据为2^64位。
C、双核CPU,是指在一个主板上放入两个CPU并行进行工作。
D、我国自主产权的CPU龙芯3A集成了两个处理器核心3、ASCII码表中的大写字母后有6个其它字符,接着便是小写字母。
现已知:A字母的ASCII码为(41)16{表示16进制数41 },那么f应为( )10A、46B、78C、102D、1084、Pascal的创始人是()。
(A)Donald E.Knuth (B)Steve Jobs (C)Charles Bachman D (D)Niklaus Wirth5、若二叉树的先序遍历序列为ABDECF,中序遍历序列DBEAFC,则其后序遍历序列为()A. DEBAFCB. DEFBCAC. DEBCFAD. DEBFCA6、已知后缀表达式abc+*d-,则它的中缀表达式和前缀表达式分别是:A) (a+b)*c-d -+*abcd B)a+b*c-d -+a*bcdC)a*(b+c)-d -*a+ bcd D)a*(b+c)-d -a b*+cd7、由权值为9,2,5,7的四个叶子结点构造一棵哈夫曼树,该树的带权路径长度为()A.23B.37C.44D.468、排序算法是稳定的意思是:关键码相同的记录排序前后相对位置不发生改变,下列哪种排序算法是不稳定的:A) 冒泡排序 B) 插入排序 C) 归并排序 D) 快速排序9、下图给出了一个加权有向图,从顶点V1出发,以下哪个是活动中的关键路径()A. V1,V5,V3,V2B. V1,V4,V3,V2C. V1,V4, V2D. V1,V4,V5,V3,V210、以下有关全国信息学奥林匹克竞赛说法有误的是()A、 NOI评测只检查按照要求输出的结果,而不涉及过程和算法。
NOIP提高组初赛历年试题及答案阅读题篇
NOIP提高组初赛历年试题及答案阅读题篇阅读程序写结果(共4 题,每题8 分,共计32 分)阅读程序的最好方法并非是依次从头到尾。
程序不像迷语,我们无法从末尾几页找到答案,也不像一本引人入胜的书籍,只需直接翻到褶皱最多的那几页,我们就能找到最精彩的片断。
因此我们在阅读程序时,最好逐一考察研究每一段代码,搞清楚每一段代码的来龙去脉,理解每一段代码在程序中所起的作用,进而形成一个虚拟的程序结构,并以此为基础来进行阅读。
1、分层读:高层入手,逐层深入,正确理解程序。
2、写注解:固化、总结、提炼已有的理解成果。
3、先模拟:根据代码顺序跟踪变量,模拟运算。
4、找规律:先模拟几次循环后,找出背后的规律。
5、看功能:从代码结构和运算结果判断程序功能。
6、猜算法:有时不知道算法,通过结构和函数猜一猜。
7、换方法:了解程序本质后,换一个熟悉的方法试试。
对大多数人来说,写程序是令人开心的一件事情,读别人的程序却很痛苦,很恐惧,宁愿自己重写一遍。
其实读到好的程序,就像读一篇美文,令人心旷神怡,豁然开朗,因为这背后是一个人的思维,甚至整个人生。
阅读别人的程序不仅可以巩固自己的知识,启发自己的思维,提升自己的修养,让你收获满满,其实,这也是在学习、在竞赛、在工作中的最重要、最常用的基本功。
如果说写程序是把自己的思维转化为代码,读程序就是把代码转化为你理解的别人的思维。
当你阅读程序时有强烈的代入感,像演员一样,真正进入到编剧的精神世界,面部表情也随之日渐丰富起来。
祝贺你!你通关了!总之,看得多,码得多,拼得多,你就考得多……NOIP2011-1.#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]++;}i=0;sum=0;while(sum<(n/2+1)){i++;sum+=a[i];}cout<<i<<endl;return 0;}输入:114 5 6 6 4 3 3 2 3 2 1一步步模拟,注意输出的是sum超出循环条件时的i值(中位数),而不是sum,也不是a[x]输出:3NOIP2011-2.#include <iostream> using namespace std; int n;void f2(int x,int y); void f1(int x,int y) {if(x<n)f2(y,x+y);}void f2(int x,int y) {cout<<x<<' ';f1(y,x+y);}int main(){cin>>n;f1(0,1);return 0;}输入:30此为简单的递归题,依次输出f2(x,y)中的x值,注意边界条件时f1(x,y)的x>=30咦!这不是隔一个输出一个的Fibonacci吗?输出:1 2 5 13 34NOIP2011-3.#include <iostream>using namespace std;const int V=100;int n,m,ans,e[V][V];bool visited[V];void dfs(int x,intlen){int i;visited[x]= true;if(len>ans)ans=len;for(i=1;i<=n;i++)if( (!visited[i]) &&(e[x][i]!=-1) ) dfs(i,len+e[x][i]);visited[x]=false;}int main(){int i,j,a,b,c;cin>>n>>m;for(i=1;i<=n;i++)for(j=1;j<=m;j++)e[i][j]=-1;for(i=1;i<=m;i++){cin>>a>>b>>c;e[a][b]=c;e[b][a]=c;}for(i=1;i<=n;i++)visited[i]=false;ans=0;for(i=1;i<=n;i++)dfs(i,0);cout<<ans<<endl;return 0;}输入:4 61 2 102 3 203 4 304 1 401 3 502 4 60一看就知这是深搜算法(DFS),输入是个四个顶点的无向图(邻接矩阵如下):如len>ans,则ans=len,可以说明这是个在图中用DFS找最长的路径的程序。
NOIP提高组初赛历年试题及答案完善题篇
for (i = m; i>= 1; i--){
used[data[i]] = false;
for (j =data[i]+1; j <= n; j++) if (!used[j]){
used[j] =true;
data[i] = j;
flag = true;
break;
}
if (flag)
{
for (k = i+1;k <= m; k++)
solve(left, j –1, deep + 1);
if(j<right)
solve(j+ 1, right, deep + 1);
}
int main()
{
inti;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
maxDeep=0;
solve(1,n,1);
cout<<maxDeep<<' '<<num<<endl;
}
void push()
for (j = 1; j<=n; j++) if (!used[j]){
data[k] = j;
used[j] =true;
break;
}
break;
}
}
}
}
NOIP2012-2.新壳栈 小 Z 设计了一种新的数据结构“新壳栈”。首先,它和传统的栈一样支持压入、弹 出操作。此外,其栈顶的前 c 个元素是它的壳,支持翻转操作。其中,c> 2 是 一个固定的正整数,表示壳的厚度。小 Z 还希望,每次操作,无论是压入、弹 出还是翻转,都仅用与 c 无关的常数时间完成。聪明的你能帮助她编程实现“新 壳栈”吗? 程序期望的实现效果如以下两表所示。其中,输入的第一行是正整数 c,之后每 行输入都是一条指令。另外,如遇弹出操作时栈为空,或翻转操作时栈中元素不 足 c 个,应当输出相应的错误信息。
noip普及组初赛试题及答案
noip普及组初赛试题及答案### NOIP 普及组初赛试题及答案#### 一、选择题(每题2分,共10分)1. 题目:计算机程序设计语言中,哪种语言是由Dennis Ritchie在1970年代初期开发的?- A. Java- B. C语言- C. Python- D. Ruby答案:B2. 题目:在计算机科学中,算法的时间复杂度是指什么?- A. 算法执行所需的内存大小- B. 算法执行所需的时间长短- C. 算法的可读性- D. 算法的可扩展性答案:B3. 题目:以下哪个是计算机网络中的数据交换技术?- A. TCP- B. UDP- C. FTP- D. HTTP答案:A4. 题目:在HTML中,用于定义文档类型声明的标签是哪一个?- A. `<!DOCTYPE>`- B. `<html>`- C. `<head>`- D. `<body>`答案:A5. 题目:以下哪个是操作系统的五大基本功能之一?- A. 邮件服务- B. 文件系统管理- C. 网络服务- D. 办公自动化答案:B#### 二、填空题(每空2分,共20分)1. 在C语言中,用于定义一个整型变量的关键字是 int。
2. 数据结构中的栈是一种后进先出(LIFO)的数据结构。
3. 在Java中,一个类可以继承另一个类的属性和方法,这体现了面向对象程序设计的继承特性。
4. 在数据库管理系统中,SQL代表结构化查询语言,它是用于管理关系数据库的标准语言。
5. 计算机网络中的DNS服务用于将域名解析为IP地址。
#### 三、简答题(每题10分,共20分)1. 题目:请简述什么是二叉树,并给出二叉树的两种主要遍历方式。
答案:二叉树是一种特殊的树形数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。
二叉树的两种主要遍历方式是前序遍历和后序遍历。
前序遍历的顺序是先访问根节点,然后是左子树,最后是右子树。
