通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"NOIP真题" 试卷中 NOIP第二十二届全国青少年信息学奥林匹克联赛初赛试题[2016提高组] 中有题目如下:
第1题
(交朋友)根据社会学研究表明,人们都喜欢找和自己身高相近的人做朋友。 现在有 n 名身高两两不相同的同学依次走入教室,调查人员想预测每个人在走入教室的瞬间最想和已经进入教室的哪个人做朋友。当有两名同学和这名同学的身高差一样时,这名同学会更想和高的那个人做朋友。比如一名身高为 1.80 米的同学进入教室时,有一名身高为 1.79 米的同学和一名身高为 1.81 米的同学在教室里,那么这名身高为1.80 米的同学会更想和身高为 1.81 米的同学做朋友。对于第一个走入教室的同学我们不做预测。
由于我们知道所有人的身高和走进教室的次序,所以我们可以采用离线的做法来解决这样的问题,我们用排序加链表的方式帮助每一个人找到在他之前进入教室的并且和他身高最相近的人。
#include <iostream> using namespace std; #define MAXN 200000 #define infinity 2147483647 int answer[MAXN], height[MAXN], previous[MAXN], next[MAXN]; int rank[MAXN]; int n; void sort(int l, int r) { int x = height[rank[(l + r) / 2]], i = l, j = r, temp; while (i <= j) { while (height[rank[i]] < x) i++; while (height[rank[j]] > x) j--; if ( ___(1)___ ) { temp = rank[i]; rank[i] = rank[j]; rank[j] = temp; i++; j--; } } if (i < r) sort(i, r); if (l < j) sort(l, j); } int main() { cin >> n; int i, higher, shorter; for (i = 1; i <= n; i++) { cin >> height[i]; rank[i] = i; } sort(1, n); for (i = 1; i <= n; i++) { previous[rank[i]] = rank[i - 1]; ___(2)___ ; } for (i = n; i >= 2; i--){ higher = shorter = infinity; if (previous[i] !=0) shorter = height[i] - height[previous[i]]; if (next[i] != 0) ___(3)___ ; if ( ___(4)___ ) answer[i] = previous[i]; else answer[i] = next[i]; next[previous[i]] = next[i]; ___(5)___ ; } for (i = 2; i <= n; i++) cout << i << ":" << answer[i]; return 0; }
所属试卷:NOIP第二十二届全国青少年信息学奥林匹克联赛初赛试题[2016提高组]
当派生类继承一个基类时,默认的继承方式为
有如下程序,运行时的输出结果是。
编写代码,获得用户输入的一个合法算式并输出结果。参考答
(读者自行创建,注意每行第一个逗号后面有空格),其内容
以下叙述中正确的是( )。
下列关于队列的叙述中正确的是( )。
给定程序中,函数fun功能是:找出100~999之间
以下叙述正确的是。
表达式{1,2,3}&{3,4,5}的值为______
表达式int('11',8)的值为__________
为了建立如图所示的存储结构(即每个结点两个域,data
以下程序输出结果是___________。
目前普通家庭连接因特网,以下几种方式哪种传输速率最高
定义学生选修课程的关系模式:SC(S#,Sn,C#,C
请设计一个算法,将给定的表达式树(二叉树)转换为等价的
在Linux 中,管道分为 ______ 种类型,若创
MYSQL查询语句中用inner join(join)
IP 协议的核心问题
要求视图的更新必须满足查询中的条件,在视图建立语句中应
数据库是按照一定的数据模型组织的、长期存储在计算机内,
现在用如下代码来计算xn,其时间复杂度为。
若任一个字符的编码都不是其他字符编码的前缀,则称这种编
当a=3,b=2,c=1时,执行以下程序段后a=___
在C语言中,一维数组的定义方式为:类型说明符 数组名
若char w,int x,float y,doubl
C语言的输出功能是由系统提供的输出函数实现的。
执行下列语句的结果是_____。
如果根结点的深度记为 1,则一棵恰有2011 个叶结点
(最大连续子段和) 给出一个数列(元素个数不多于 10
微型计算机中,控制器的基本功能是( )。
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2