通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"NOIP真题" 试卷中 NOIP第十六届全国青少年信息学奥林匹克联赛初赛试题[2010提高组] 中有题目如下:
第1题
(烽火传递) 烽火台又称烽燧,是重要的军事防御设施,一般建在险要处或交通要道上。 一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息;夜晚燃烧干柴,以火光传递军情。在 某两座城市之间有 n 个烽火台,每个烽火台发出信号都有一定的代价。为了使情报准确地传 递,在连续的 m个烽火台中至少要有一个发出信号。现输入 n、m和每个烽火台发出信号的代 价,请计算总共最少花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确传 递。
例如,有 5 个烽火台,他们发出信号的代价依次为 1,2,5,6,2,,且 m为 3,则总共最少 花费代价为 4,即由第 2 个和第 5 个烽火台发出信号。
#include<iostream> #include<cstring> using namespace std; const int SIZE=100; int n,m,r,value[SIZE],heap[SIZE], pos[SIZE],home[SIZE],opt[SIZE]; //hep[i] 表示用顺序数组储存的堆 heap 中第 i 个元素的值 //pos[i] 表示 opt[i] 在堆 heap中的位置,即 heap[pos[i]]=opt[i] //home[i] 表示 heap[i] 在序列 opt 中的位置,即 opt[home[i]]=heap[i] void swap(int i,int j)// 交换堆中的第 i 个和第 j 个元素 { int tmp; pos[home[i]]=j; pos[home[j]]=i; tmp=heap[i]; head[i]=head[j]; heap[j]=tmp; tmp=home[i]; home[i]=home[j]; home[j]=tmp; } void add(int k)// 在堆中插入 opt[k] { int i; r++; heap[r]= ① ; pos[k]=r; ② ; i=r; while( (i>1) && (heap[i]<heap[i/2]) ) { swap(i,i/2); i/=2; } } void remove(int k)// 在堆中删除 opt[k] { int i,j; i=pos[k]; swap(i,r);; r--; if(i==r+1) return ; while( (i>1)&&(heap[i]<heap[i/2]) ) { swap(i,i/2); i/=2; } while(i+i<=r) { if( (i+i+1<=r) && (heap[i+i+1]<heap[i+i]) ) j=i+i+1; else ③ ; if(hea[i]>heap[j]) { ④ ; i=j; } else break; } } int main() { int i; cin>>n>>m; for(i=1;i<=n;i+++) cin>>value[i]; r=0; for(i=1;i<=m;i++) { opt[i]=value[i]; add(i); } for(i=m+1;i<=n;i++) { opt[i]= ⑤ ; remove( ⑥ ); add(i); } cout<<heap[1]<<endl; return 0; }
所属试卷:NOIP第十六届全国青少年信息学奥林匹克联赛初赛试题[2010提高组]
在一个派生类对象结束其生命周期时。
有如下类和对象的定义,下列各组语句中,能输出3.141
有如下程序,运行时输出的结果是。
下列关于运算符重载的说法错误的是
(本题 8 分)某系统中进程的虚拟地址空间包括内核区、
以下是 print("1234" + 1234)的运行
下列叙述中正确的是( )。
给定程序中,函数fun的功能是:计算下式前n项的和作为
在长度为n的有序线性表中进行二分查找,最坏情况下需要比
以下程序段中,与其他三个功能不同的程序段是。
设有以下程序段:则变量y的取值范围是。
表达式list (map (lambda x:x+5.
假设有列表a=['name','age','sex’]
若float a,b,c;要通过语句:scanf("%
若s是int型变量,且s=7,则表达式s/2+(s+1
结构化程序是由________、________、__
完全删除/tmp下的所有文件用什么命令及参数?
将光盘/dev/hdc卸载的命令。答:umount/d
Linux为用户提供的接口有____ 、____、__
通过将______动态链入块设备控制结构blk_dev
执行下列语句后,*(p+1)的值是_____。
功能:求出二维数组外围元素之和,作为函数值返回。二维数
有以下程序程序运行后的输出结果是
某二叉树共有399个结点,其中有199个度为2的结点,
将a、b、c三个结点链成一个单向链表,并给各结点的数据
对于一个 1到n 的排列 P(即 1到 n中每一个数在
十进制小数13.375对应的二进制数是( )。
输入:30输出:____
生物特征识别, 是利用人体本身的生物特征进行身份论证的
十进制小数125.125对应的8进制数是:
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2