本人第一次考试,感觉还好吧,误打误撞报了个提高组,觉得还是有点亏了(把普及组的脸甩在地上狠狠摩擦那种)。。蒟蒻的我答后面的题时就开始困难了,但多选题答得还可以。考场有提前交卷的,大神总是很多呀…
不过第二大题第一问真的很厉害…表示很慌

第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题

竞赛时间:2018 年 10 月 13 日 14:30~16:30

选手 注意:
 试题纸共有 10 页,答题纸共有 2 页,满分 100 分。请在答题纸上作答,写 在试题纸上的一律无效。
 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资 料。

一、单项选择题(共 10 题,每题 2 分,共计 20 分;每题有且仅有一个正确选项)

  1. 下列四个不同进制的数中,与其它三项数值上不相等的是( )。

A. (269)16
B. (617)10
C. (1151)8
D. (1001101011)2

  1. 下列属于解释执行的程序设计语言是( )。
    A. C
    B. C++
    C. Pascal
    D. Python

  2. 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。
    A. 1983
    B. 1984
    C. 1985
    D. 1986

  3. 设根节点深度为 0,一棵深度为 h 的满 k(k>1)叉树,即除最后一层无任何子节点外,每一层上的所有结点都有 k 个子结点的树,共有( )个结点。
    A. (k h+1 - 1) / (k - 1)
    B. k h-1
    C. k h
    D. (k h-1) / (k - 1)

  4. 设某算法的时间复杂度函数的递推方程是 T(n) = T(n - 1) + n(n 为正整数)及 T(0) = 1,则该算法的时间复杂度为( )。
    A. O(log n) B. O(n log n) C. O(n) D. O(n2)

  5. 表达式 a * d - b * c 的前缀形式是( )。
    A. a d * b c * -
    B. - * a d * b c
    C. a * d - b * c
    D. - * * a d b c

  6. 在一条长度为 1 的线段上随机取两个点,则以这两个点为端点的线段的期望 长度是( )。
    A. 1 / 2
    B. 1 / 3
    C. 2 / 3
    D. 3 / 5

  7. 关于 Catalan 数 Cn = (2n)! / (n + 1)! / n!,下列说法中错误的是( )。
    A. Cn 表示有 n + 1 个结点的不同形态的二叉树的个数。
    B. Cn 表示含 n 对括号的合法括号序列的个数。
    C. Cn 表示长度为 n 的入栈序列对应的合法出栈序列个数。
    D. Cn 表示通过连接顶点而将 n + 2 边的凸多边形分成三角形的方法个数。

  8. 假设一台抽奖机中有红、蓝两色的球,任意时刻按下抽奖按钮,都会等概率获得红球或蓝球之一。有足够多的人每人都用这台抽奖机抽奖,假如他们的策略均为:抽中蓝球则继续抽球,抽中红球则停止。最后每个人都把自己获得的所有球放到一个大箱子里,最终大箱子里的红球与蓝球的比例接近于
    ( )。
    A. 1 : 2
    B. 2 : 1
    C. 1 : 3
    D. 1 : 1

  9. 为了统计一个非负整数的二进制形式中 1 的个数,代码如下: int CountBit(int x)
    { int ret = 0; while (x) { ret++; ________;
    } return ret;
    }
    则空格内要填入的语句是( )。
    A. x >>= 1
    B. x &= x - 1
    C. x |= x >> 1
    D. x <<= 1

二 、不定项选择题(共 5 题,每题 2 分,共计 10 分;每题有一个或多个正确选项,多选或少选均不得分 )

  1. NOIP 初赛中,选手可以带入考场的有( )。
    A. 笔
    B. 橡皮
    C. 手机(关机)
    D. 草稿纸

  2. 2-3 树是一种特殊的树,它满足两个条件:
    (1)每个内部结点有两个或三个子结点; (2)所有的叶结点到根的路径长度相同。
    如果一棵 2-3 树有 10 个叶结点,那么它可能有( )个非叶结点。
    A. 5
    B. 6
    C. 7
    D. 8

  3. 下列关于最短路算法的说法正确的有( )。
    A. 当图中不存在负权回路但是存在负权边时,Dijkstra 算法不一定能求出源点到所有点的最短路。
    B. 当图中不存在负权边时,调用多次 Dijkstra 算法能求出每对顶点间最短路径。
    C. 图中存在负权回路时,调用一次 Dijkstra 算法也一定能求出源点到所有点的最短路。
    D. 当图中不存在负权边时,调用一次 Dijkstra 算法不能用于每对顶点间最短路计算。

  4. 下列说法中,是树的性质的有( )。
    A. 无环
    B. 任意两个结点之间有且只有一条简单路径
    C. 有且只有一个简单环
    D. 边的数目恰是顶点数目减 1

  5. 下列关于图灵奖的说法中,正确的有( )。
    A. 图灵奖是由电气和电子工程师协会(IEEE)设立的。
    B. 目前获得该奖项的华人学者只有姚期智教授一人。
    C. 其名称取自计算机科学的先驱、英国科学家艾伦•麦席森•图灵。
    D. 它是计算机界最负盛名、最崇高的一个奖项,有“计算机界的诺贝尔奖” 之称。

三、 问题求解(共 2 题,每题 5 分,共计 10 分)

  1. 甲乙丙丁四人在考虑周末要不要外出郊游。
    已知①如果周末下雨,并且乙不去,则甲一定不去;②如果乙去,则丁一定 去;③如果丙去,则丁一定不去;④如果丁不去,而且甲不去,则丙一定不 去。如果周末丙去了,则甲________(去了/没去)(1分),乙________(去 了/没去)(1分),丁________(去了/没去)(1分),周末________(下雨/ 没下雨)(2分)。

  2. 方程 a*b = (a or b) * (a and b),在 a,b 都取 [0, 31] 中的整数时, 共有_____组解。(*表示乘法;or表示按位或运算;and表示按位与运算)

四、阅读程序写结果(共 4 题,每题 8 分,共计 32 分)

  1. #include int main() { int x; scanf("%d", &x); int res = 0; for (int i = 0; i < x; ++i) { if (i * i % x == 1) {
    ++res;
    } } printf("%d", res); return 0;
    }

输入:15
输出:_________

  1. #include int n, d[100]; bool v[100]; int main() { scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", d + i); v[i] = false;
    } int cnt = 0;
    for (int i = 0; i < n; ++i) { if (!v[i]) {
    for (int j = i; !v[j]; j = d[j]) { v[j] = true;
    }
    ++cnt;
    }
    }
    printf("%d\n", cnt); return 0;
    }

输入:10 7 1 4 3 2 5 9 8 0 6 输出:_________

  1. #include using namespace std; string s; long long magic(int l, int r) { long long ans = 0; for (int i = l; i <= r; ++i) {
    ans = ans * 4 + s[i] - ‘a’ + 1;
    }
    return ans;
    } int main() { cin >> s; int len = s.length(); int ans = 0;
    for (int l1 = 0; l1 < len; ++l1) {
    for (int r1 = l1; r1 < len; ++r1) {
    bool bo = true;
    for (int l2 = 0; l2 < len; ++l2) { for (int r2 = l2; r2 < len; ++r2) { if (magic(l1, r1) == magic(l2, r2) && (l1 != l2 || r1 != r2)) {
    bo = false;
    }
    }
    }
    if (bo) {
    ans += 1;
    }
    }
    }
    cout << ans << endl;
    return 0;
    }

输入:abacaba 输出:_________

  1. #include using namespace std; const int N = 110; bool isUse[N]; int n, t;
    int a[N], b[N];
    bool isSmall() { for (int i = 1; i <= n; ++i) if (a[i] != b[i]) return a[i] < b[i]; return false;
    }
    bool getPermutation(int pos) { if (pos > n) {
    return isSmall();
    }
    for (int i = 1; i <= n; ++i) { if (!isUse[i]) { b[pos] = i; isUse[i] = true;
    if (getPermutation(pos + 1)) { return true;
    }
    isUse[i] = false;
    }
    }
    return false;
    } void getNext() { for (int i = 1; i <= n; ++i) {
    isUse[i] = false;
    }
    getPermutation(1); for (int i = 1; i <= n; ++i) { a[i] = b[i];
    }
    } int main() { scanf("%d%d", &n, &t); for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    }
    for (int i = 1; i <= t; ++i) { getNext();
    }
    for (int i = 1; i <= n; ++i) { printf("%d", a[i]);
    if (i == n) putchar(’\n’); else putchar(’ ');
    }
    return 0;
    }
    输入1:6 10 1 6 4 5 3 2 输出1:_________(3分)
    输入2:6 200 1 5 3 4 2 6 输出2:_________(5分)

五、完善程序(共 2 题,每题 14 分,共计 28 分)

  1. 对于一个1到?的排列?(即1到?中每一个数在?中出现了恰好一次),令??为第?个位置之后第一个比??值更大的位置,如果不存在这样的位置,则?? = ? +
    1。举例来说,如果? = 5且?为1 5 4 2 3,则?为2 6 6 5 6。

下列程序读入了排列?,使用双向链表求解了答案。试补全程序。(第二空
2 分,其余 3 分)数据范围 1 ≤ ? ≤ 105。

#include using namespace std; const int N = 100010; int n; int L[N], R[N], a[N]; int main() { cin >> n; for (int i = 1; i <= n; ++i) { int x;
cin >> x;
(1) ; }
for (int i = 1; i <= n; ++i) {
R[i] = (2) ;
L[i] = i - 1;
}
for (int i = 1; i <= n; ++i) { L[ (3) ] = L[a[i]];
R[L[a[i]]] = R[ (4) ];
}
for (int i = 1; i <= n; ++i) {
cout << (5) << " ";
}
cout << endl; return 0;
}

  1. 一只小猪要买 N 件物品(N 不超过 1000)。

它要买的所有物品在两家商店里都有卖。第 i 件物品在第一家商店的价格是 a[i],在第二家商店的价格是 b[i],两个价格都不小于 0 且不超过 10000。如果在第一家商店买的物品的总额不少于 50000,那么在第一家店买的物品都可以打 95 折(价格变为原来的 0.95 倍)。
求小猪买齐所有物品所需最少的总额。

输入:第一行一个数 N。接下来 N 行,每行两个数。第 i 行的两个数分别代表 a[i],b[i]。输出:输出一行一个数,表示最少需要的总额,保留两位小数。
试补全程序。(第一空 2 分,其余 3 分)

#include #include using namespace std;
const int Inf = 1000000000; const int threshold = 50000; const int maxn = 1000;
int n, a[maxn], b[maxn]; bool put_a[maxn]; int total_a, total_b; double ans; int f[threshold];
int main() { scanf("%d", &n);
total_a = total_b = 0;
for (int i = 0; i < n; ++i) { scanf("%d%d", a + i, b + i); if (a[i] <= b[i]) total_a += a[i]; else total_b += b[i];
}
ans = total_a + total_b; total_a = total_b = 0; for (int i = 0; i < n; ++i) { if ( (1) ) { put_a[i] = true; total_a += a[i];
} else {
put_a[i] = false; total_b += b[i];
}
}
if ( (2) ) { printf("%.2f", total_a * 0.95 + total_b); return 0;
} f[0] = 0;
for (int i = 1; i < threshold; ++i) f[i] = Inf;
int total_b_prefix = 0; for (int i = 0; i < n; ++i) if (!put_a[i]) { total_b_prefix += b[i];
for (int j = threshold - 1; j >= 0; --j) { if ( (3) >= threshold && f[j] != Inf) ans = min(ans, (total_a + j + a[i]) * 0.95 + (4) );
f[j] = min(f[j] + b[i], j >= a[i] ? (5) : Inf); }
}
printf("%.2f", ans); return 0;
}

第二十四届全国青少年信息学奥林匹克联赛初赛提高组参考答案一、单项选择题(共 10 题,每题2 分,共计20 分)
1 2 3 4 5 6 7 8 9 10
D D B A D B B A D B
二、 不定项选择题(共 5 题,每题 2 分,共计 10 分;每题有一个或多个正确选项,没有部分分)
1 2 3 4 5
AB CD ABD ABD BCD
三、 问题求解(共 2 题,每题 5 分,共计10 分)

  1. 去了 没去 没去 没下雨 (第4 空 2 分,其余 1 分)
  2. 454
    四、阅读程序写结果(共 4 题,每题 8 分,共计 32 分)
  3. 4
  4. 6
  5. 16
  6. 输出1:2 1 3 5 6 4 (3分) 输出2:3 2 5 6 1 4 (5分)
    五、完善程序(共计 28 分,以下各程序填空可能还有一些等价的写法,由各省赛区组织本省专家审定及上机验证,可以不上报 CCF NOI 科学委员会复核)

1
. (1) a[x] := i a[x] = i 3
(2) i + 1 2
(3) R[a[i]] 3
(4) a[i] 3
(5) R[i] 3
2
. (1) a[i] * 0.95 <= b[i] 或 b[i] >= a[i] * 0.95 2
(2) total_a >= threshold 或 threshold <= total_a 或 total_a >= 50000 或 50000 <= total_a 3
(3) total_a + j + a[i] 3
(4) f[j] + total_b - total_b_prefix 3
(5) f[j - a[i]] 3

noip提高组初赛有感——相关推荐

  1. NOIP提高组初赛[选择题知识点汇总]

    [常识] 1. 从(C)年开始,NOIP 竞赛将不再支持Pascal 语言 A. 2020 B. 2021 C. 2022 D. 2023 2.设A和B是两个长为n的有序数组,现在需要将A和B合并成一 ...

  2. 历年NOIP提高组初赛选择解析(至2006年。未完结)

    这又是一篇没有代码的题解 这个题解不会根据一年年的来,而是根据题型来的.大家收好啊-orz 题型1--数学题 1.1集合计算 1.(NOIP2004–T1-单选)设全集 I = I= I={ a , ...

  3. NOIP提高组初赛模拟赛赛后感想

    记录:2018.9.25日,山大华特卧龙学校信息队进行了一次初赛的模拟考- 没错,就是2012年的 结果蒟蒻考了48 44 (批错分了QAQ)分,勉强过了当年的线-(SD) 单选题目错了2道题,其中一 ...

  4. NOIP提高组初赛知识点解析错题本

    文章目录 前言 正题 知识点:各种东西的简称 知识点:冯诺依曼 知识点:64位处理器 两大优点 误区 知识点:软件库名称 知识点:CPU 知识点:面向对象程序设计与面向对象语言 知识点:可以带入考场的 ...

  5. NOIP 2015 提高组 初赛

    NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...

  6. NOIP 2017 提高组 初赛

    NOIP 2017 提高组 初赛 做题感悟. 五.完善程序,是本张试卷最简单的题目,两道题做完,大约花了10分钟.2017-10-17 18:25 对了答案,破天荒,全对. 1.(大整数除法) 有如下 ...

  7. NOIP 2016 提高组 初赛

    NOIP 2016 提高组 初赛 疑难点 学习 感悟. 一. 2.该题81容易看成81次按键,实际是屏幕上出现的第81个字符,实际按键次数超过81次. 3.异或,相同位上,数字相同取0,数字不同取1, ...

  8. NOIP2018提高组初赛准备

    NOIP2017提高组初赛错题 一.单项选择题(共15 题,每题1.5 分,共计22.5 分:每题有且仅有一个正确选项) 4. 2017年10月1日是星期日,1949年10月1日是( ). A. 星期 ...

  9. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

最新文章

  1. 目标检测+mAP+IoU
  2. SQL server2008 无法启动调试存储过程
  3. 互联网周刊:谁是下一个IE?
  4. 蓝桥杯java第三届决赛第四题--DNA比对
  5. kafka生产者、消费者消息操作命令
  6. 入门Python,这些优点你要知道
  7. 6还是5?大还是小?看完这些动图,感觉数学白学了
  8. Element Ui 关闭对话框清空验证消息,清除form表单的操作
  9. Axure9(基础二)
  10. pythonmt4通讯swot矩阵_swot分析矩阵范例
  11. 轻松访问Google Chrome浏览器中的浏览历史记录
  12. eclipse java验证码_spring整合kaptcha验证码
  13. 记忆日语的奥秘—日语汉字读音变化
  14. opencv及图像基本处理
  15. 微信公众号 Markdown 排版工具
  16. Week_eight
  17. “21天好习惯“ 第十六期 — 16之黑马面面移动端布局(二)
  18. Java实现宿舍管理系统、基于java、JDBC、GUI(含源文件/综合项目)
  19. 密码编码学与网络安全(2):对称密码之传统加密技术
  20. Python实现多层感知器网络

热门文章

  1. 小米3G刷openwrt详解
  2. 无锡计算机办公软件培训班,无锡文员办公软件培训周末班,电脑办公速成班
  3. Webots的示例中心(demo)
  4. java类中只有一个public类
  5. 首席新媒体运营黎想教程:用户运营之用户行为分析
  6. 使用PLSQL Developer 来查看官方文档
  7. pcs和serdes_SERDES应用场景以及对应的复位设计
  8. 【总结】1265- 理解 ESLint、Prettier、EditorConfig 代码规范
  9. 教你用JavaScript制作小日历
  10. 猎聘网面试题:SimpleDateFormat线程安全吗