Loading [MathJax]/jax/output/HTML-CSS/jax.js

南昌邀请赛网络赛2019.04.20 题解

Solved A B C D E F G H I J K L M
7/13 O . . . . . . O O Ø O Ø O
  • O for passing during the contest
  • Ø for passing after the contest
  • ! for attempted but failed
  • · for having not attempted yet

比赛链接

官方题解

A

题目描述

输出前五个完全数。

解题思路

打表。

AC代码

点击

B

题目描述

解题思路

AC代码

点击

C

题目描述

解题思路

AC代码

点击

D

题目描述

解题思路

AC代码

点击

E

题目描述

解题思路

AC代码

点击

F

题目描述

解题思路

AC代码

点击

G

题目描述

解题思路

AC代码

点击

H

题目描述

给定一个2×N的格点图,从左上角走到右下角,可以向上、下、左、右、左上、左下、右上、右下走,走过的点的集合为S,求S的种数对1000000007取模的值。0<n109

解题思路

最左一列只能有两种选择:只经过上面、两块都经过

最右一列只能有两种选择:只经过下面、两块都经过

其他列每一列至少需要有一个经过的点,故有三种选择:只经过上面、只经过下面、两块都经过。

于是,答案为4×3N2。注意特判N=1

AC代码

点击

I

题目描述

给定一个序列,求其中一个子序列,其中元素a[i][105,105],使得其区间最小值乘区间和最大,求出最大值。

解题思路

代码&思路 by​ Nikkukun

对于每一个值作为区间最小值,求出最大的左端与右端,求出其和的最大值,复杂度O(n2)

考虑最小值的正负,当最小值为正时,向左右分别延伸到最大值且不含比该值小的数的区间;否则延伸到最小值且不含比该值小的数的区间。

用线段树维护区间最大值,乘以1后也可维护区间最小值(用ST表会MLE)。

再用含偏移的树状数组(处理负数)维护距离a[i]最近的、比a[i]小的下标j。从左端往右、从右端往左分别维护一个树状数组,树状数组的下标表示a[i],其值表示下标j

AC代码-BIT+线段树 By Nikkukun-223ms

点击

赛后突然发现维护一个单调增的单调栈亦可以找出左右端的最大伸展区间。

AC代码-单调栈+线段树 By Potassium-514ms

点击

J

题目描述

给定一棵含n个节点的树,有m个询问,每个询问(u,v,k)求给定两点(u,v)之间路径长度不大于k的路径数。

2n105,1m105,1u,vn,0k109

解题思路

如果求区间小于k的个数,可以用主席树;而在树上路径,则可以用在树上建主席树。设f(b)表示从根(1)b的路径中小于等于k的路径个数,则ans(u,v,k)=f(u)+f(v)2f(lca(u,v))

注意离散化。

主席树早忘光了,赛场上没写出来……

AC代码

点击

K

题目描述

给定一个序列an,定义三个函数f,g,wf(l,r)=a[x](lxr)g(l,r)=f(x)(lxr)w(l,r)=g(x)(lxr)

q个询问,每次询问一个区间[l,r],输出w(l,r)

解题思路

比赛的时候模拟一下fgw打了个表找出来规律,然后就过了。

最后的结果是一个有规律的平行四边形,用线段树很容易维护。(用前缀和也可,但打线段树打上瘾了

打表代码

点击

输出结果:

1
11
010
0000
10001
110011
0100010
00000000
100010001
1100110011
01000100010
000000000000
1000100010001
11001100110011
010001000100010
0000000000000000
10001000100010001
110011001100110011
0100010001000100010
00000000000000000000

AC代码

点击

L

题目描述

有一棵树,第一年是一个杆,每年每个叶子节点伸出三个长度为当前树枝长度四分之一的树枝,分别与当前树枝方向呈0°,60°,60°。给一个方程为y=k(xx0)+y0的直线去砍这棵树,问最后根节点连带的一段没被砍掉的有多么长。

解题思路

??这么水一题当时怎么没做

根据深度找搜索方向,深搜一遍,314甚至不需要剪枝(什么,最后只跑了14ms)

AC代码

点击

M

题目描述

给一个只含小写字母的字符串Sn个字符串T,判断每一个T是否是S的子串。0<|S|,|T|1e5

解题思路

代码&思路 by Nikkukun

预处理出nxt[i][j]表示第i位字符之后最接近的字符j+a的下一个位置,O(ni=1len(Ti))处理。

AC代码-By Nikkukun-1783ms

点击

赛后发现,原来暴力也能过,而且竟然只是1700ms2000ms的差别。。。

AC代码-By Potassium-2093ms

点击
Powered By Valine
v1.5.2