标签归档:C++

水平不高怎么拿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++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。

继续阅读

C++题目:小 X 与小和尚(sum)

题目描述

研究了这么多学术性的问题,小 X 想听个故事来放松一下自己的大脑。而小 X 最喜欢听的是这样一个故事: 从前有座山 , 山 里有座庙, 庙里有个老和尚和小和尚,老和尚给小和尚讲故事: 从前有座山 , 山里有座庙, 庙里有个老和尚和小和尚,老和尚给小和尚讲故事: 从前有座山……不过讲着讲着,老和尚也有点累 了,所以这一次老和尚不给小和尚讲故事了,老和尚要求小和尚去敲木鱼。 这个敲木鱼是有讲究的,在开始敲之前老和尚会告诉小和尚一个数 n。而小和尚在敲的时候, 第一次敲 1 下, 第二次敲 2 下… 第 n 次敲 n 下, 第 n+1 次敲 n 下, 第 n+2 次敲 n-1 下… 第 2× n 次敲 1 下,第 2× n+1 次敲 1 下, 第 2× n+2 次敲 2 下……如果用一个简单的数列 来表示小和尚 每次敲了多少 下,那应该是: 1, 2, 3,……, n-1, n, n, n-1, n-2,……, 3, 2, 1, 1, 2, 3,……简单说来就是 1~n, n~1, 1~n 一直这么循环地敲下去。小和尚数着数着就不记得自己敲了多少下了,而他只记得自己刚刚敲完第 m 次。 马上老和尚就要来检查小和尚是不是在认真的敲了,小和尚没办法, 只 能求助于你, 希望你能告诉他, 敲完第 m 次的时候,他一共敲了多少下?

继续阅读