下面是NOIP2015提高组初赛错题整理
具有 n
个节点,e
条边的图采用邻接表存储结构,进行深度优先遍历和广度优先遍历运算的时间复杂度为( O(e+n)
)
解释:因为在遍历时我们有st
数组来防止重复访问,故没每一个节点只访问一次,所以是e+n
双向链表中有两个指针域,llink
和 rlink
,分别指回前驱及后继,设 p
指向链表中的一个结点,q
指向一待插入结点,现要求在 p
前插入 q
,则正确的插入为( )
p->llink->rlink=q;
q->rlink=p;
q->llink=p->llink;
p->llink=q;
解释:
①p
左边元素的右边位置是q
②q
的右边元素是p
③q
左边元素是原来p
的左边元素
④p
的左边元素是q
3.对图 G 中各个结点分别指定一种颜色,使相邻结点颜色不同,则称为图 G 的一个正常着色。正常着色图 G 所必需的最少颜色数,称为 G 的色数。那么下图的色数是
解释:
3 看图
在 1 和 2015 之间(包括 1 和 2015 在内)不能被 4、5、6 三个数任意一个数整除的数有_____个。
解释:
1075个
容斥原理:2015-能被4整除的-能被5整除的-能被6整除的+能被4和5整除的+能被5和6整除的+能被4和6整除的-能被4和5和6整除的
注意几和几表示的是最小公倍数
(双子序列最大和)给定一个长度为n(3≤n≤1000)
的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出这个最大和。一个连续子序列的序列和为该连续子序列中所有数之和。要求:每个连续子序列长度至少为 1,且两个连续子序列之间至少间隔 1 个数。
#include <iostream>
using namespace std;
const int MAXN = 1000;
int n, i, ans, sum;
int x[MAXN];
int lmax[MAXN];
// lmax[i] 为仅含 x[i] 及 x[i] 左侧整数的连续子序列的序列和中,最大的序列和
int rmax[MAXN];
// rmax[i] 为仅含 x[i] 及 x[i] 右侧整数的连续子序列的序列和中,最大的序列和
int main() {
cin >> n