标签归档:C++

NOIP提高组(CSP-S)复赛知识点汇总

基础算法

贪心

枚举

分治

二分答案

倍增

*构造

高精

模拟

*分数规划

图论

图论入门

最短路算法

单源最短路:从一个点到其他所有点的最短路

算法:Dijkstra、spfa、

多源最短路:从所有点到另外点的最短路

算法:Floyd

差分约束

最小生成树(kruskal、prim)

并查集(扩展域)

拓扑排序

二分图染色

*二分图匹配

tarjan找scc、桥、割点,缩点

LCA

树的直径、树的重心

dfs序

*树链剖分

数论

gcd、lcm

埃氏筛法

exgcd,求解同余方程、逆元

快速幂

*组合数学

矩阵

*高斯消元

数据结构

链表

队列(单调队列)、栈(单调栈)

st表

hash表

线段树、树状数组

字典树

*分块

*平衡树

*主席树

*莫队

动态规划

背包DP

树形DP

记忆化搜索

递推

区间DP

序列DP

*概率DP

*DP优化(不涉及斜率优化、四边形不等式等等)

搜索

暴搜(dfs、bfs)

搜索的剪枝

启发式搜索(A∗)

迭代加深搜索、*IDA∗

*随机化搜索

其他算法

STL的基本使用方法

脑洞的正确使用方法

*KMP

*状态压缩

*AC自动机

CCF开启NOI Online培训

CCF先后在3月和4月举办了两场NOI Online能力测试,第三场测试将于5月24日举行,这给受疫情影响训练中断的学生提供比赛锻炼和交流机会,这是NOI新开创的一种形式。

CCF没有止步,紧接着,将开启NOI Online培训!

CCF首次Online培训定于5月5日推出,为学生提供学习的机会,与Online能力测试相互呼应。Online培训课程主要面向中小学生。

Online培训每周推出一期,每期邀请两位具有NOI钻石或金牌教练资质的老师讲授。培训内容将结合《CCF中学生计算机程序设计系列教材》和《CCF青少年计算机程序设计评价标准》,从零基础入门、基础、提高再到专业知识,由浅入深、循序渐进。

Online培训首期邀请到了两位教师均荣获NOI钻石教练称号,其训练的学生获得过IOI金牌,他们是湖南长沙雅礼中学朱全民老师及广东中山纪念中学宋新波老师。

关于培训讲师,CCF采取邀请和公开征集的形式。不论你是教师或学生,只要感兴趣,愿意和大家分享,欢迎加入讲师队伍,咨询邮箱noi@ccf.org.cn。

讲师介绍

朱全民

朱全民

CCF会员。长沙市雅礼中学正高级教师,湖南省特级教师,长沙市信息技术工作室首席名师兼农村名师工作站站长,雅礼中学信息学奥赛奠基人,NOI钻石指导教师,曾获2016年度CCF卓越服务奖;指导学生获得国际信息学奥林匹克竞赛(IOI)6金1银,带领雅礼信息学教练团队指导学生获IOI奖项3金1银。他是《CCF 青少年计算机程序设计评级标准》课题主持人,《CCF 中学计算机程序设计》系列教材的总体构架和编审负责人。

宋新波

宋新波

CCF理事。中山纪念中学信息学竞赛教练,NOI钻石指导老师,CCF杰出演讲者;指导学生获全国青少年信息学奥林匹克联赛(NOIP)一等奖近500人次,全国决赛(NOI)金牌22枚、银牌22枚、铜牌13枚,25人次入选国家集训队,3人入选国家队,获国际信息学奥林匹克竞赛(IOI)金牌2枚、国际银牌1枚。他先后获得“中山市十大杰出青年”、“中山市十杰市民”、“南粤优秀教师”、“广东省五一劳动奖章”、“全国优秀教师”等荣誉称号。

转载 https://www.ccf.org.cn/Focus/2020-05-05/700814.shtml

历年NOIP普及组题目分析(2000-2016)

年份题目名称考查内容难度
 2000-2016年NOIP普及组复赛题目
2000乘积最大划分动态规划★★★
2000税收与补贴问题数学或枚举★★
2000单词接龙深搜★★★★
2000计算器的改良字符串处理★★
2001装箱问题0/1背包或枚举
2001数的计算动态规划
2001求先序排列树的遍历
2001最大公约数和最小公倍数数学(辗转相除法)
2002过河卒棋盘动态规划★☆
2002级数求和循环结构(枚举)
2002选数深搜、素数判定★★★
2002产生数最短路(图论)、高精度★★★★
2003数字游戏动态规划★★★★★
2003麦森数分治、高精度运算★★★
2003数学(卡特兰数)★★
2003乒乓球字符串处理★☆
2004FBI树二叉树的遍历★★
2004不高兴的津津枚举
2004火星人数学(排列)、stl★★★
2004花生采摘贪心
2005采药0/1背包
2005循环高精度运算、数论、快速幂★★★★★
2005淘淘摘苹果枚举
2005校门外的树枚举
2006开心的金明0/1背包
2006明明的随机数桶排序、冒泡
2006Jam计数法数学、字符串★★★
2006数列数学(进制转换)★☆
2007守望者的逃离动态规划或枚举★★★
2007奖学金快速排序(双关键字)
2007Hanoi双塔问题数学、高精度★☆
2007纪念品分组贪心、排序算法★☆
2008传球游戏动态规划★★★
2008排座椅贪心★★
2008ISBN号码字符串处理
2008立体图字符输出★★★
2009道路游戏动态规划★★★★★
2009分数线划定快速排序(双关键字)
2009细胞分裂数论★★★★
2009多项式输出字符串处理
2010数字统计枚举
2010接水问题模拟★★
2010导弹拦截排序+枚举,贪心★★★★
2010三国游戏贪心★★★
2011瑞士轮模拟、快拍、归并排序★★★
2011数字反转模拟、字符串
2011统计单词数模拟、字符串函数
2011表达式的值栈、表达式计算、递推★★★★★
2012摆花动态规划★★★★
2012质因数分解枚举
2012寻宝模拟,模运算★★★
2012文化之旅搜索、最短路(图论)、动规★★★★☆
2013小朋友的数字动态规划、子段和★★★★
2013计数问题 枚举
2013表达式求值 模拟或栈★★
2013车站分级图论、拓扑排序★★★★☆
2014珠心算测验枚举
2014 比例简化枚举★☆
2014 螺旋矩阵数学分析★★★
2014子矩阵搜索或dp★★★★☆
2015金币枚举
2015扫雷枚举★☆
2015推销员枚举、堆★★★★☆
2015求和数学(数列)★★★
2016买铅笔模拟
2016回文日期枚举★☆
2016海港枚举★★
2016魔法阵数学分析、枚举★★★★

水平不高怎么拿NOIP一等奖?南京外国语许昊然 比赛经验

本文转自江苏信息学竞赛

本文作者许昊然毕业于南京外国语学校,曾获NOIP 2012一等奖(590分,江苏第一名)、NOI 2012金牌(485分,全国第19名)、IOI 2013金牌(世界第三名),高一获清华保送资格,2014年被美国麻省理工学院录取。

Part I. 赛场策略与技巧

* 首先,如果你的水平已经远超NOIP,自然是想怎么考怎么考了。

* 同理,如果你什么都不会,那么策略再好也是没用的。

* 因此,下面说的策略、技巧主要是针对水平中等,游走在分数线附近的同学们的。

赛场策略的最终目标就是一句话:多拿分。

这是考试,为了分数应当使用任何你能想到的手段。(当然作弊啥的除外……)

多拿分,具体来说就是两部分:

* 会做的subtask不丢分

* 不会做的subtask多骗分

1、先讲一下“会做的subtask不丢分”。

subtask就是每道题目里各个部分分。如果一个subtask你会做,比如遇到了水题,或者某道题你会写30分的小数据,那么请务必确保你能拿到这部分分数。

以及,不要嫌分数少而懒得写!30分也是分,10分也是分,在分数拉不开的情况下(如果你水平并不优秀,这就是你总是要面对的情况),10分的差距就决定了你是一等还是二等。

记住,如果你因为粗心大意,一个简单的subtask没拿到分,你就不得不依靠更难的题目来把这部分分数拉回来。

举个例子,某A,第一题因打错文件名爆零,其余两题满分。某B,只会前两题,第三题写了朴素得30分。最后A得200分,B得230分。难题和水题都是100分,评奖可不管你到底写对的是难题还是水题。

请大家记住:在大多数OI比赛中,只要暴力分全部拿到,就是一等奖(或金牌)。

但问题是,大家都会写暴力,为啥一等奖只有总名额的10%呢?因为大多数人都会把暴力写错,或看暴力分少懒得写。如果你正确写出了所有暴力,不出意外你就是一等奖了。

继续阅读

Noip 2019

NOIP–全国分区联赛

  NOIP(National Olympiad in Informatics in Provinces)–全国青少年信息学奥林匹克联赛(省赛):NOIP由中国计算机学会(CCF)进行全国统一命题,以省为单位在同一时间、不同地点由各省特派员组织考试。

  NOIP竞赛比赛时间

  NOIP在每年10-11月份,分别举行初赛和复赛。

  初赛侧重考察:

  学生的计算机基础知识和编程的基本能力,并对知识面的广度进行测试。初试为资格测试,各省初试成绩在本赛区前15%的学生进入复赛。

  复赛侧重考察:

  学生对问题的分析理解力,数学抽象能力,编程语言的能力和编程技巧、想象力和创造性等。各省联赛的等第奖在复试的优胜者中产生。

继续阅读

C++ 数据结构 struct 语句

C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:

  • Title :标题
  • Author :作者
  • Subject :类目
  • Book ID :书的 ID

定义结构

为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;

type_name 是结构体类型的名称,member_type1 member_name1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型 Books,变量为 book

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

示例:对结构体数组排序。

按结构体中某个成员进行排序,下面代码以成员b1为升序的排序。

继续阅读

C++中的二分算法,二分查找

用C++实现二分法查找,简单来说就是每次去一个有序数列的中间数,时间复杂度为O(n),然后和目标值比对,如果不是的话,大的就在中间值的右边查找,小的话就在中间值的左边查找,时间复杂度为O(logn)。这是最初级的算法。

#include <iostream>
 
using namespace std;
 
 
int SearchK(int *Arr,int low,int high,int k)//在有序数列中返回t的序号p是数列的起点,q是终点
{
 
	int mid;
	while (low<high)//稳定版,考虑数组中不存在k的情况
	{
		mid = (low + high) / 2;
 
		if (Arr[mid] ==k)
		{
			return mid + 1;
		}
		else 
		{
			if (Arr[mid] < k)//右边查找
			{
				low = mid + 1;
			}
			else
			{
				high = mid - 1;
			}
		}
	}
 
	cout << "未找到" << endl;
	return -1;//没找到
 
}
 
int main()
{
	int p[] = { 1, 2, 3, 4, 5, 6, 7 };
 
	cout<<SearchK(p, 0, 6, 6)<<endl;
	cout << SearchK(p, 0, 6, 8)<<endl;
 
	system("pause");
	return 0;
}

C++题目: 缺失的扑克牌

题目描述

有一种扑克牌,都是以大写字母“A~Z”组成,每张牌有n张。现在这副牌中少了一些,小Y请了几个同学来帮助确认到底少了哪些牌。每个同学将自己清理的牌用字母区间和数量进行表示,比如 A Q 1表示A到Q之间的牌各有1张。T W 2 表示T到W之间的牌各有2张。

现在根据这些同学提供的信息,请你编写一个程序来帮助小Y确认一下缺失哪个字母扑克牌,每种扑克牌缺多少张。

继续阅读

C++中什么是STL介绍

一、一般介绍     

STL(StandardTemplate Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++Standard Library)中,是ANSI/ISOC++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。

继续阅读