通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"NOIP真题" 试卷中 NOIP第十六届全国青少年信息学奥林匹克联赛初赛试题[2010普及组] 中有题目如下:
第1题
(过河问题) 在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥 走到河的左岸。 在这伸手不见五指的黑夜里, 过桥时必须借助灯光来照明, 很不幸的是,他 们只有一盏灯。 另外,独木桥上最多承受两个人同时经过,否则将会坍塌。 每个人单独过桥 都需要一定的时间,不同的人需要的时间可能不同。两个人一起过桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥时所花的时间。现输入 n( 2≤n≤100)和这 n 个 人单独过桥时需要的时间,请计算总共最少需要多少时间,他们才能全部到达河的左岸。 例如,有 3 个人甲、乙、丙,他们单独过桥的时间分别为 1、 2、4,则总共最少需要 的时间为 7 。具体方法是:甲、乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然 后甲、丙再一起过桥到河的左岸,总时间为 2+1+4=7 。
#include<iostream> using namespace std; const int SIZE = 100; const int INFINITY = 10000; const bool LEFT = true; const bool RIGHT = false; const bool LEFT_TO_RIGHT = true; const bool RIGHT_TO_LEFT = false; int n, hour[SIZE]; //存放每个人的过河时间 bool pos[SIZE]; int max(int a, int b) { if (a > b) return a; else return b; } int go(bool stage) { int i, j, num, tmp, ans; if (stage == RIGHT_TO_LEFT) { num = 0; ans = 0; for (i = 1; i <= n; i++) if (pos[i] == RIGHT) { num++; //人数加1 if (hour[i] > ans) ans = hour[i]; //ans保留了最长的过桥时间, } if ( ① __________ ) return ans; ans = INFINITY; for (i = 1; i <= n - 1; i++) if (pos[i] == RIGHT) //如果这个人在右侧 for (j = i + 1; j <= n; j++) if (pos[j] == RIGHT) { pos[i] = LEFT; pos[j] = LEFT; tmp = max(hour[i], hour[j]) + ② __________) ; if (tmp < ans) ans = tmp; pos[i] = RIGHT; pos[j] = RIGHT; } return ans; } if (stage == LEFT_TO_RIGHT) { ans = INFINITY; for (i = 1; i <= n; i++) if ( ③_________) { pos[i] = RIGHT; tmp = ④ _________; if (tmp < ans) ans = tmp; ⑤__________ ; } return ans; } return 0; } int main() { int i; cin>>n; for (i = 1; i <=n; i++) { cin>>hour[i]; pos[i] = RIGHT; //pos是记录每个元素所处的位置。 } cout<<go(RIGHT_TO_LEFT)<<endl; //初始状态RIGHT_TO_LEFT return 0; }
所属试卷:NOIP第十六届全国青少年信息学奥林匹克联赛初赛试题[2010普及组]
有如下程序,运行时的输出结果是。
下列程序的运行结果是( )。
下列程序从键盘输入一个一元二次方程ax2+bx+c=0
详细设计主要确定每个模块具体执行过程,也称过程设计,下
以下结构体类型说明和变量定义中正确的是。
若变量x、y已正确定义并赋值,以下符合C语言语法的表达
设有如下语句则以下叙述中错误的是。
在Python中定义类时,与运算符“//”对应的特殊方
以下不是Python的注释方式是。
已知x={1:1,2:2},那么执行语句x[3]=3之
函数f中的形参a为一个10*10的二维数组,n的值为5
若有定义语句:则表达式:a+(int)(b/3*(in
单链表的结点类型定义为:指针p指向链表中间的某一个结点
下列叙述中错误的是( )。
为脚本程序指定执行权的命令及参数是( )。
在Linux系统中,以( )方式访问设备。
MYSQL查询语句中用 表示右然连接。
create procedure是创建存储过程的命令,
删除student表上xm_index索引的语句是 _
下面说法不正确的是( )。
深度为K的二叉树中结点总数≤2k-1。
什么是软件危机?为什么会产生软件危机?[答案解析]软件
(归并第 k 小)已知两个长度均为 n 的有序数组 a
C语言的三种基本结构是_____结构、选择结构、循环结
函数调用语句func((e1,e2),(e3,e4,e
则调用此函数的正确写法是(假设变量a的说明为int a
带链的栈与顺序存储的栈相比,其优点是
今有一空栈 S,对下列待进栈的数据元素序列 a,b,c
6 个顶点的连通图的最小生成树,其边数为( )。
输入:20 12输出:_____
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2