【牛客网】NOIP赛前集训营-提高组(第二场)

本文解析了三道算法挑战赛题目,包括寻找子区间最大中位数、数字权值的统计及树形图上的路径保护问题,涵盖数据结构与算法设计等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A A A 中位数

链接:https://www.nowcoder.com/acm/contest/172/A
来源:牛客网

题目描述

小N得到了一个非常神奇的序列 A A A 。这个序列长度为 N N N ,下标从 1 1 1 开始。 A A A 的一个子区间对应一个序列,可以由数对 [ l , r ] [l,r] [l,r] 表示,代表 A [ l ] , A [ l + 1 ] , . . . , A [ r ] A[l], A[l + 1], ..., A[r] A[l],A[l+1],...,A[r] 这段数。对于一个序列 B [ 1 ] , B [ 2 ] , . . . , B [ k ] B[1], B[2], ..., B[k] B[1],B[2],...,B[k] ,定义 B B B 的中位数如下:

  1. 先对 B B B 排序。得到新的序列 C C C
  2. 假如 k k k 是奇数,那么中位数为 C [ k + 1 2 ] C[\frac{k+1}{2}] C[2k+1] 。假如 k k k 为偶数,中位数为 C [ k 2 ] C[\frac{k}{2}] C[2k]
    对于 A A A 的所有的子区间,小N可以知道它们对应的中位数。现在小N想知道,所有长度 ≥ L e n ≥ Len Len 的子区间中,中位数最大可以是多少。

输入描述

第一行输入两个数 N , L e n N, Len N,Len
第二行输入序列 A A A ,第 i i i 个数代表 A [ i ] A[i] A[i]

输出描述

一行一个整数,代表所有长度 > = L e n >=Len >=Len 的子区间中,最大的中位数。

样例1

输入

11 3
4864 8684 9511 8557 1122 1234 953 9819 101 1137 1759

输出

8684

备注

数据范围:
30 % : n ≤ 200 30\%: n ≤ 200 30%:n200
60 % : n ≤ 2000 60\%: n ≤ 2000 60%:n2000
另外有 20 % : 20\%: 20% 不超过 50 50 50 个不同的数
100 % : 1 ≤ L e n ≤ n ≤ 1 0 5 , 1 ≤ a [ i ] ≤ 1 0 9 100\%:1 ≤ Len ≤ n ≤ 10^5, 1 ≤ a[i] ≤ 10^9 100%1Lenn105,1a[i]109

题解

实现



B B B 数数字

链接:https://www.nowcoder.com/acm/contest/172/B
来源:牛客网

题目描述

小N对于数字的大小一直都有两种看法。第一种看法是,使用字典序的大小(也就是我们常用的判断数字大小的方法,假如比较的数字长度不同,则在较短一个前面补齐前导 0 0 0 ,再比较字典序),比如 43 &lt; 355 , 10 &lt; 11 43&lt;355,10&lt;11 43<355,10<11 。第二种看法是,对于一个数字,定义他的权值为,也就是各个数位的乘积。
现在给定两个区间, [ L , R ] [L,R] [L,R] [ L 1 , R 1 ] [L1,R1] [L1,R1] 。小N现在想知道,有多少使用字典序判大小法在 [ L , R ] [L,R] [L,R] 之间的数字,满足其第二种定义的权值也在 [ L 1 , R 1 ] [L1,R1] [L1,R1] 之间。
换句话说,对于一个数 x x x ,定义 f ( x ) f(x) f(x) x x x 的各个数位的乘积。对于 L ≤ x ≤ R L ≤ x ≤ R LxR ,问有多少x满足, L 1 ≤ f ( x ) ≤ R 1 L1 ≤ f(x) ≤ R1 L1f(x)R1

输入描述

第一行四个整数 L , R , L 1 , R 1 L,R,L1,R1 L,R,L1,R1

输出描述

一行一个整数,代表小N想知道的数的数量。

样例1

输入

34 10000 24 57

输出

777

备注

20 % : L , R ≤ 10000000 20\%: L,R ≤ 10000000 20%:L,R10000000
40 % : L , R ≤ 3 ∗ 1 0 7 40\%: L,R ≤ 3*10^7 40%:L,R3107
60 % : L , R , L 1 , R 1 ≤ 1 0 9 60\%: L,R,L1,R1 ≤ 10^9 60%:L,R,L1,R1109
另 外 有 20 % : L 1 , R 1 ≤ 1000 另外有20\%:L1,R1 ≤ 1000 20%L1,R11000
100 % : 0 ≤ L , R , L 1 , R 1 ≤ 1 0 1 8 , L ≤ R , L 1 ≤ R 1 100\%: 0 ≤ L,R,L1,R1 ≤ 10^18, L ≤ R, L1 ≤ R1 100%:0L,R,L1,R11018,LR,L1R1

题解

实现



C C C 保护

链接:https://www.nowcoder.com/acm/contest/172/C
来源:牛客网

题目描述

C C C 国有 n n n 个城市,城市间通过一个树形结构形成一个连通图。城市编号为 1 1 1 n n n ,其中 1 1 1 号城市为首都。国家有 m m m 支军队,分别守卫一条路径的城市。具体来说,对于军队 i i i ,他守卫的城市区域可以由一对二元组 ( x i , y i ) (x_i,y_i) (xi,yi) 代表。表示对于所有在 x i x_i xi y i y_i yi 的最短路径上的城市,军队 i i i 都会守卫他们。
现在有 q q q 个重要人物。对于一个重要人物 j j j ,他要从他的辖区 v j v_j vj 出发,去到首都。出于某些原因,他希望找到一个离首都最近的,且在 v j v_j vj 到首都路径上的城市 u j u_j uj ,使得至少有 k j k_j kj 支军队,能够全程保护他从 v j v_j vj u j u_j uj 上所经过的所有城市。换句话说,至少有 k i k_i ki 支军队,满足在树上, x i x_i xi y i y_i yi 的路径能完全覆盖掉 v j v_j vj u j u_j uj 的路径。

输入描述

第一行输入两个数 n , m n,m n,m
接下来 n − 1 n-1 n1 行,每行两个整数 u , v u,v u,v ,表示存在一条从城市 u u u 到城市 v v v 的道路。
接下来 m m m 行,每行两个整数 x , y x,y x,y 。描述一个军队的守卫区域。
接下来一行一个整数 q q q
接下来 q q q 行,每行两个整数 v j , k j v_j,k_j vj,kj

输出描述

对于每次询问,输出从 v j v_j vj u j u_j uj 最少需要经过多少条边。假如不存在这样的 u j u_j uj ,则输出 0 0 0

样例1

输入

8 8
7 1
1 3
3 4
4 6
6 2
4 5
7 8
7 2
7 1
7 1
7 5
1 1
1 3
1 6
5 1
8
5 1
2 1
2 1
4 2
3 2
4 2
1 1
4 1

输出

3
4
4
2
1
2
0
2

备注

20 % : n , m , q &lt; = 300 20\%: n,m,q &lt;= 300 20%:n,m,q<=300
40 % : n , m , q &lt; = 2000 40\%: n,m,q &lt;= 2000 40%:n,m,q<=2000
60 % : n , m , q &lt; = 50000 60\%: n,m,q &lt;= 50000 60%:n,m,q<=50000
100 % : n , m , q &lt; = 200000 100\%: n,m,q &lt;= 200000 100%:n,m,q<=200000

题解

实现


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值