关于初赛

关于初赛

写在前面:这个菜鸡就要退役了,就由此了纪念自己逝去的NOIP(CSP)吧

选择题

我们先来说说选择题,虽说选择题里的确有几道硬件相关的题目,但其实更多的还是考算法复杂度、算法概念、二叉树相关的这些的,跟复赛关联性还是蛮大的。 最近几年特别爱考进制相关的,什么十进制小数转二进制啊,什么原码反码和补码啊之类的。 你甚至会发现,每年NOIP初赛的选择题里都会有一些神题,但也不缺乏送分题,比如不能带什么东西进考场就是典型的送分题。而且CCF每次都会出于自己有关的~~(而且我每次都会蒙错QAQ)~~。

然后我们再详细说说选择题考什么。 选择题主要是考数学知识、图论、数据结构、时间复杂度、硬件知识、计算机发展史、常用软件知识和CCF赞歌。 下面主要提一下数学知识和CCF赞歌相关的,相信各位对硬件知识与计算机发展史也应该已经有所了解。 好吧,还是给一张计算机发展史的表吧:

第一代(1946~1958)二(1958~1964)三(1964~1975)四(1975~至今)
核心部件电子管晶体管中小规模集成电路大/超大规模集成电路
内存汞延迟线磁芯存储器半导体存储器半导体存储器
外存纸带磁带磁带、磁盘磁盘、光盘
速度(指令数/秒几千条几百万条几千万条数亿条

还有关于计算机中各存储单位的进位关系:

1TB=1024GB,1GB=1024MB,1MB=1024KB 1KB=1024B,1B(字节)=8bit(位)

然后是美籍匈牙利数学家冯·诺依曼于1946年提出存储程序原理的特点(这个也曾经于多年前考过):

(1)采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中

(2)存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。

(3)指令由操作码和地址组成。操作码指明本指令的操作类型,地址码指明操作数的地址

(4)通过执行指令直接发出控制信号控制计算机的操作

(5)以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。

(6)数据以二进制表示。

还有什么IP地址呀,TCP/IP协议啊都网上查一下,建议自己在考前归纳一下、

数学知识

首先说说数学知识。这方面主要是排列组合、进制转换和原码反码补码。

排列组合

首先是排列组合。何谓排列组合?360百科这样说:“所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数。” 的确,解决排列组合的题目的关键就是分清到底是排列还是组合,这两者的主要区别就是排列问题是有序的,而组合问题是无序的。 简单一点的题就是乘法原理和加法原理,但光这样是远远不够的。 排列组合的题目在分清题目究竟是求排列还是组合以后就可以套公式求解。

img

其实更为复杂的题目应该数同一道题既有排列又有组合。

例题:由0,1,2,3,4,5可以组成多少个没有重复数字五位奇数.由于末位和首位有特殊要求,应该优先安排,以免不合要求的元素占了这两个位置.

img

解决排列组合综合性问题的一般过程如下:

1.认真审题弄清要做什么事2.怎样做才能完成所要做的事,即采取分步还是分类,或是分步与分类同时进行,确定分多少步及多少类。3.确定每一步或每一类是排列问题(有序)还是组合(无序)问题,元素总数是多少及取出多少个元素.4.解决排列组合综合性问题,往往类与步交叉,因此必须掌握一些常用的解题策略

进制转换

…如果这个我都要说的话你怕是个假人

原码反码和补码

1.原码:在用二进制原码表示的数中,符号位为0表示正数,符号位为1表示负数,其余各位表示数值部分。

2.反码:对于正数,它的反码与原码相同,对于负数,反码符号位与原码相同,其余的按位取反。

3.补码:对于正数,它的补码与原码相同,对于负数,先得到相应的反码,并在此基础上加1。

CCF赞歌

这部分基本上网上你是没地方找到整理好的文档的,主要是因为这东西每年都会换,相当于政治里的时事热点,而OI界基本上没有人会年年都去专门整理 。自己有兴趣的去找QAQ,我就不弄了。

NOI官网

CCF官网

问题求解

至于问题求解,主要是数学题,弄清楚组合数学之类的知识(其实很多时候只是一些类似于小学奥数的东西)基本上就没问题了(但务必要拿准了,毕竟一题5分呢)你要是剩余时间充裕,你也可以模拟(我就经常这么干QAQ)。

我在这里补充一下卡特兰数:

卡特兰数可以应用于

  • 一个栈的进栈次序为1、2、3…n,不同的出栈次序有几仲

  • 有N个节点,共能组成几种不同的二叉树

  • 还有一些但PJ组不会用到我就不介绍了

因为本人水平有限就只贴公式不给证明过程了

h ( n ) = C n 2 n n + 1 h(n)=\frac{C_{n}^{2n}}{n+1} h(n)=n+1Cn2n


阅读程序写结果

然后就是阅读程序写结果
这是初赛中单题分值最高的题,一共四题,每题八分。一般最后两题会出现递归。

下面来详细说说看程序写结果这类题型。
根据历年的题目,我把这类题分为:简单送分题、循环结构题、递归搜索题。
先来说说简单送分题,我这里所指的简单送分题,不仅是指没有循环的,也指那些循环只进行了没几次的简单结构。这类题目一般看看程序顺着其结构往下走就能得到答案,关键是看清楚程序每一步,千万不能因为疏忽大意导致这类题失分。但也许你会说,这类题咋可能会失分呢?这就不对了别忘了某些毒瘤逗号惨案。

所以做完卷子后(时间肯定是足够的),一定要反复检查阅读程序写结果,尤其是这种简单送分题,因为那些思想龌龊的出题人总是喜欢在简单的题目上埋坑。

接下来再说说循环结构题,我所指的是较为复杂的循环结构的题目,比如说NOIP普及组2017年的第4题(题目自己找)

算了我贴一下吧QAQ

#include <iostream>
using namespace std;

int main() 
{
    int n, m;
    cin >> n >> m;
    int x = 1;
    int y = 1;
    int dx = 1;
    int dy = 1;
    int cnt = 0;
    while (cnt != 2) 
    { 
        cnt = 0;
        x= x + dx;
        y= y + dy;
        if (x == 1 || x == n) 
        {
            ++cnt;
            dx = -dx;
        }
        if (y == 1 || y == m) 
        { 
            ++cnt;
            dy = -dy;
        }
    }
    cout << x << " " << y << endl; 
    return 0;
}
输入 14 3
输出 1:_________(3 分)
输入 22017 1014
输出 2:_________(5 分)

循环一烦,形同递归。
其实这个题还有一个坑点,就是每次循环的时候都会有一句cnt = 0
不过话虽这么讲,循环至少比递归来得好一些,层数也要少(要知道递归可以用来代替多层循环的)
这类题一般会出在第四题,如果出题人觉得的确有点为难参赛者,他们会出两个输入(如本例),第一个输入会非常小,这个分一定要拿到。关键是这种题一定是有规律的,你要根据小数据(自己造的)来猜测规律然后求解。
如果不幸遇见递归,那么请把递归当做是循环来做。

做阅读程序一定要仔细,向我就经常递归题漏一句,然后模拟半天快出来时发现…当场去世

完善程序

然后就是完善程序。这部分其实说简单还是蛮简单的,说难也蛮难的。
为什么这么说呢?因为做复赛的题目的时候,你完全可以按着自己的思路来,而在初赛的这个地方,你必须完全按着写代码的人的思路来。不过幸好,出题人心情好会出模板题(好像某年TG就考了裸的Dijkstra)。
在这类题型上,就是要注意多读几遍题目和程序,不要急于去填空。不过其实有些空是可以猜出来的。

但是也会遇到像LXL这样的毒瘤出题人QAQ,那你就只能听天由命了。

现在我们来说一下骗(乱)分(蒙)

比如说NOIP2017普及组初赛的完善程序第一题(快速幂):

#include<iostream>
using namespace std;
int x, p, m, i, result;
int main() {
    cin >> x >> p >> m;
    result = ________(1)________;
    while (________(2)________) {
        if (p % 2 == 1)
            result = ________(3)________;
        p /= 2;
        x = ________(4)________;
    }
    cout << ________(5)________ << endl;
    return 0;
}

第一个空嘛,看一眼就会填上1.其实是个OIer的应该都有这样一个常识:累加时初值应该为0,而累乘时则一般为1
至于最后一个空嘛,当然填 result 喽,不然前面算它干嘛。
像这种分还是应该要拿的,不然太对不起自己了,对吧?

反正不管怎么样,就是不能空着,实在不行初始化一下也有可能蒙对QAQ。

还有,对称大法好!!!

还有一个注意点就是,完善程序题的变量名一定要注意,绝对不能想当然。
举个栗子,NOIP2017普及组的最后一题(二分),题目中使用了lboundubound,但很多人由于代码习惯问题写成了lboundrbound,甚至有人写成了lr,多可惜(我90%也会写l,r QAQ)

并不那么重要的结尾

至于初赛咋复习最高效?其实就是多做真题,去领悟CCF的命题规律(尽管CCF的规律是永远无法摸透的)。做题做多了就有觉悟了嘛。
有一点建议:平时有事没事多上CCF官网和NOI官网,看看CCF的最新政策之类的,因为每年NOIP初赛选择题基本上都会有CCF赞歌

不管咋样,初赛的题就算不会也绝不能空着,蒙也得蒙完。万一蒙对了呢
选择题真的不会就三长一短选最短,三短一长选最长

阅读程序和完善程序的也可以这么训练:

你和你的同学互相帮(坑)助(害),把自己的程序给对方出题,因为阅读程序有时候会出现明明是个模板,你却发现不了的情况。而完善程序就是要靠大量训练的啦。而且码风都要毒瘤一些,因为CCF的人都是很猥琐的QAQ.

祝愿大家能过初赛QAQ
(阅读程序写结果)一定要好好读程序,一定要好好读程序,一定要好好读程序!!!重要的事情说三遍。

最后祝大家RP++吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值