公众号内回复【NOIP2009S】即可获取下载链接,直接打印电子版让孩子做即可,文件包含
关于图灵机下面的说法哪个是正确的:
本题共 1.5 分
关于BIOS下面的说法哪个是正确的:
已知大写字母A的ASCII编码为65(十进制),则大写字母J的 十六进制 ASCII编码为:
本题共 1.5 分
在字长为16位的系统环境下,一个16位带符号整数的二进制补码为1111111111101101。其对应的十进制整数应该是:
本题共 1.5 分
一个包含n个分支结点(非叶结点)的非空满k叉树,k>=1,它的叶结点数目为:
本题共 1.5 分
表达式a*(b+c)-d的后缀表达式是:
abcd*+-
abc+*d-
abc*+d-
-+*abcd
本题共 1.5 分
最优前缀编码,也称Huffman编码。这种编码组合的特点是对于较频繁使用的元素给与较短的唯一编码,以提高通讯的效率。下面编码组合哪一组不是合法的前缀编码。
本题共 1.5 分
速排序平均情况和最坏情况下的算法时间复杂度分别为:
,最坏情况
, 最坏情况
本题共 1.5 分
下图给出了一个加权无向图,从顶点
开始用prim算法求最小生成树。则依次加入最小生成树的顶点集合的顶点序列为:
本题共 1.5 分
全国信息学奥林匹克的官方网站为参与信息学竞赛的老师同学们提供相关的信息和资源,请问全国信息学奥林匹克官方网站的网址是:
本题共 1.5 分
关于CPU下面哪些说法是正确的:
本题共 1.5 分
关于计算机内存下面的说法哪些是正确的:
本题共 1.5 分
关于操作系统下面说法哪些是正确的:
本题共 1.5 分
关于计算机网络,下面的说法哪些是正确的:
本题共 1.5 分
关于HTML下面哪些说法是正确的:
本题共 1.5 分
若3个顶点的无权图G的邻接矩阵用数组存储为{{0,1,1},{1,0,1},{0,1,0}},假定在具体存储中顶点依次为: v1,v2,v3。关于该图,下面的说法哪些是正确的:
本题共 1.5 分
在带尾指针(链表指针clist指向尾结点)的非空循环单链表中每个结点都以next字段的指针指向下一个节点。假定其中已经有2个以上的结点。下面哪些说法是正确的:
本题共 1.5 分
散列表的地址区间为0-10,散列函数为H(K)=K mod 11。采用开地址法的线性探查法处理冲突,并将关键字序列26,25,72,38,8,18,59存储到散列表中,这些元素存入散列表的顺序并不确定。假定之前散列表为空,则元素59存放在散列表中的可能地址有:
本题共 1.5 分
排序算法是稳定的意思是关键码相同的记录排序前后相对位置不发生改变,下列哪些排序算法是稳定的:
本题共 1.5 分
在参加NOI系列竞赛过程中,下面哪些行为是被严格禁止的:
本题共 1.5 分
拓扑排序是指将有向无环图G中的所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若<u,v> ∈E(G),则u在线性序列中出现在v之前,这样的线性序列成为拓扑序列。如下的有向无环图,对其顶点做拓扑排序,则所有可能的拓扑序列的个数为______
。
答案:
本题共 5 分
某个国家的钱币面值有1, 7,
,
共计四种,如果要用现金付清10015元的货物,假设买卖双方各种钱币的数量无限且允许找零,那么交易过程中至少需要流通_______张钱币。
答案:
本题共 5 分
#include <iostream>
using namespace std;
int a,b;
int work(int a,int b){
if (a%b)
return work(b,a%b);
return b;
}
int main(){
cin >> a >> b;
cout << work(a,b) << endl;
return 0;
}
输入:123 321 输出:_________
答案:
本题共 8 分
#include <iostream>
using namespace std;
int main()
{
int a[4],b[4];
int i,j,tmp;
for (i=0;i<4;i++)
cin >> b[i];
for (i=0;i<4;i++)
{
a[i]=0;
for (j=0;j<=i;j++)
{
a[i]+=b[j];
b[a[i]%4]+=a[j];
}
}
tmp=1;
for (i=0;i<4;i++)
{
a[i]%=10;
b[i]%=10;
tmp*=a[i]+b[i];
}
cout << tmp << endl;
return 0;
}
输入:2 3 5 7 输出:_______________
答案:
本题共 8 分
#include <iostream>
using namespace std;
const int maxn=50;
const int y=2009;
int main()
{
int n,c[maxn][maxn],i,j,s=0;
cin >> n;
c[0][0]=1;
for(i=1;i<=n;i++)
{
c[i][0]=1;
for(j=1;j<i;j++)
c[i][j]=c[i-1][j-1]+c[i-1][j];
c[i][i]=1;
}
for(i=0;i<=n;i++)
s=(s+c[n][i])%y;
cout << s << endl;
return 0;
}
输入:17 输出:
答案:
本题共 8 分
#include <iostream>
using namespace std;
int main()
{
int n,m,i,j,p,k;
int a[100],b[100];
cin >> n >> m;
a[0]=n;
i=0;
p=0;
k=0;
do
{
for (j=0;j<i;j++)
if (a[i]==a[j])
{
p=1;
k=j;
break;
}
if (p)
break;
b[i]=a[i]/m;
a[i+1]=a[i]%m*10;
i++;
}while (a[i]!=0);
cout << b[0] << ".";
for (j=1; j<k; j++)
cout << b[j];
if (p)
cout << "(";
for (j=k;j<i;j++)
cout << b[j];
if (p)
cout << ")";
cout << endl;
return 0;
}
输入:5 13 输出:_________
答案:
本题共 8 分
(最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。
#include <iostream>
using namespace std;
int a[101];
int n,i,ans,len,tmp,beg,end;
int main(){
cin >> n;
for (i=1;i<=n;i++)
cin >> a[i];
tmp=0;
ans=0;
len=0;
beg= ① ;
for (i=1;i<=n;i++){
if (tmp+a[i]>ans){
ans=tmp+a[i];
len=i-beg;
}
else if ( ② &&i-beg>len)
len=i-beg;
if (tmp+a[i] ③ ){
beg= ④ ;
tmp=0;
}
else
⑤ ;
}
cout << ans << " " << len << endl;
return 0;
}
本题共 10 分
(寻找等差数列) 有一些长度相等的等差数列(数列中每个数都为0~59的整数),设长度均为L,将等差数列中的所有数打乱顺序放在一起。现在给你这些打乱后的数,问原先,L最大可能为多大?先读入一个数n(1<=n<=60),再读入n个数,代表打乱后的数。输出等差数列最大可能长度L。
#include <iostream>
using namespace std;
int hash[60];
int n, x, ans, maxnum;
int work(int now) {
int first, second, delta, i;
int ok;
while ( ① && !hash[now])
++now;
if (now > maxnum)
return 1;
first = now;
for (second = first; second <= maxnum; second++)
if (hash[second]) {
delta = ② ;
if (first + delta * ③ > maxnum)
break;
if (delta == 0)
ok = ( ④ );
else{
ok = 1;
for (i = 0; i < ans; i++)
ok = ⑤ && (hash[first+delta*i]);
}
if (ok){
for (i = 0; i < ans; i++)
hash[first+delta*i]--;
if (work(first))
return 1;
for (i = 0; i < ans; i++)
hash[first+delta*i]++;
}
}
return 0;
}
int main(){
int i;
memset(hash, 0, sizeof(hash));
cin >> n;
maxnum = 0;
for (i = 0; i < n; i++){
cin >> x;
hash[x]++;
if (x > maxnum)
maxnum = x;
}
for (ans = n; ans >= 1; ans--)
if ( n%ans==0 && ⑥ ) {
cout << ans << endl;
break;
}
return 0;
}
本题共 18 分
tips
小码匠今年也要参赛,近期我正在整理CSP-J&S的知识点精简版,后面会陆续在本公众号内分享。
期待能与更多宝爸宝妈有更深度、更广度的交流,一起探讨信息学学习,让大家少走弯路。