#P17140. [NOI 2026] 线段

    ID: 2914 传统题 文件IO:segment 4000ms 1024MiB 尝试: 1 已通过: 1 难度: 5 上传者: 标签>动态规划 DP线性数据结构前缀和NOI 2026交互题

[NOI 2026] 线段

题目描述

LLnn 条包含于 [1,m][1,m] 的线段,其中第 ii0i<n0\le i<n)条线段为 [li,ri][l_i,r_i]1lirim1\le l_i\le r_i\le m)。

LL 认为过于复杂的线段相交关系不够优美。对于每一个线段集合 S{0,1,,n1}S\subseteq\{0,1,\ldots,n-1\},小 LL 定义 SS优美 的,当且仅当满足如下要求:

  • 构造一个顶点集合与 SS 对应的图。顶点 uu 与顶点 vv 之间存在一条边,当且仅当线段 uu 与线段 vv 相交,即存在 x[1,m]x\in[1,m],满足 luxrul_u\le x\le r_ulvxrvl_v\le x\le r_v。称 SS优美 的,当且仅当构造出的图恰好为一棵树。

LL 想知道有多少线段集合是优美的,因此他给定了一个正整数 kkknk\le n)。你需要计算,对于每个 s=1,2,,ks=1,2,\ldots,k,有多少个大小为 ss 的集合是优美的。

由于答案可能较大,只需求出答案对 998244353998244353 取模后的结果。

【测试程序方式】

选手不需要,也不应该实现 main 函数。

选手需要确保提交的程序源文件包含头文件 segment.h,即在程序开头加入以下代码:

#include "segment.h"

选手需要在提交的程序源文件 segment.cpp 中实现以下两个函数:

void init(int c, int t);
  • c,tc,t 分别表示测试点编号与测试数据组数。c=0c=0 表示该测试点为样例。
  • 对于每个测试点,该函数会在程序开始运行时被评测程序调用恰好一次。
std::vector<int> segment(int n, int m, int k, std::vector<int> l, std::vector<int> r);
  • n,m,kn,m,k 分别表示线段的数量、坐标范围上限及需要计算的集合大小上限。
  • l,rl,r 分别表示每条线段的左端点与右端点。
  • 该函数需要返回一个长度 恰好k+1k+1 的序列 aa,其中 a0=0a_0=0asa_s1sk1\le s\le k)表示大小为 ss 的优美集合数量对 998244353998244353 取模后的结果。
  • 对于每个测试点,该函数会被评测程序调用恰好 tt 次。

本试题目录下的 template_segment.cpp 是提供的示例代码,选手可参考并实现自己的代码。

输入格式

选手可以在本题目录下使用如下命令编译得到可执行文件:

g++ grader.cpp segment.cpp -o segment -O2 -std=c++14 -static

对于编译得到的可执行文件 segment

  • 可执行文件将从标准输入读入以下格式的数据:
    • 第一行包含两个非负整数 c,tc,t
    • 接下来依次为每组测试数据。对于每组测试数据:
      • 第一行包含三个正整数 n,m,kn,m,k
      • i+2i+20i<n0\le i<n)行包含两个正整数 li,ril_i,r_i
  • 可执行文件将输出以下格式的数据至标准输出:
    • 对于每组测试数据,输出一行 kk 个非负整数 a1,a2,,aka_1,a_2,\ldots,a_k

输出格式

输入输出样例 #1

输入 #1

0 3
3 3 3
1 2
2 3
1 3
4 5 4
1 2
2 3
3 4
4 5
4 2 3
1 2
1 2
1 2
1 1

输出 #1

3 3 0
4 3 2 1
4 6 0

说明/提示

【样例 11 解释】

对于第一组测试数据:

  • 大小为 11 的集合有 {0},{1},{2}\{0\},\{1\},\{2\},均是优美的。
  • 大小为 22 的集合有 {0,1},{1,2},{0,2}\{0,1\},\{1,2\},\{0,2\},均是优美的。
  • 大小为 33 的集合有 {0,1,2}\{0,1,2\},构造出的图是一个三元环,不是优美的。

因此答案分别为 3,3,03,3,0

对于第二组测试数据:

  • 大小为 11 的集合中,所有 44 个集合均是优美的。
  • 大小为 22 的集合中,{0,1},{1,2},{2,3}\{0,1\},\{1,2\},\{2,3\} 是优美的。
  • 大小为 33 的集合中,{0,1,2},{1,2,3}\{0,1,2\},\{1,2,3\} 是优美的。
  • 大小为 44 的集合 {0,1,2,3}\{0,1,2,3\} 是优美的。 因此答案分别为 4,3,2,14,3,2,1

【样例 22

见选手目录下的 segment/segment2.insegment/segment2.ans

该样例满足测试点 686\sim8 的约束条件。

【样例 33

见选手目录下的 segment/segment3.insegment/segment3.ans

该样例满足测试点 9,109,10 的约束条件。

【样例 44

见选手目录下的 segment/segment4.insegment/segment4.ans

该样例满足测试点 111511\sim15 的约束条件。

【样例 55

见选手目录下的 segment/segment5.insegment/segment5.ans

该样例满足测试点 161816\sim18 的约束条件。

【样例 66

见选手目录下的 segment/segment6.insegment/segment6.ans

该样例满足测试点 22,2322,23 的约束条件。

【样例 77

见选手目录下的 segment/segment7.insegment/segment7.ans

该样例满足测试点 24,2524,25 的约束条件。

【数据范围】

KK 为单个测试点内所有测试数据的 kk 的和。对于所有测试数据,均有:

  • 1t201\le t\le20
  • 1n30001\le n\le30001m1031\le m\le10^31kn1\le k\le nK200K\le200
  • 对于所有 0i<n0\le i<n,均有 1lirim1\le l_i\le r_i\le m

::cute-table{tuack}

测试点编号 nn\le mm\le KK\le kk\le 特殊性质
131\sim3 2020 10210^2 2020
4,54,5 30003000 10310^3 200200 22 ^
686\sim8 ^ ^ 33
9,109,10 500500 200200 AA
111511\sim15 30003000 ^ BB
161816\sim18 200200 500500 5050 CC
192119\sim21 500500 10310^3 200200 ^
22,2322,23 10310^3 10210^2 3030
24,2524,25 30003000 10310^3 200200 ^
  • 特殊性质 AA:对于所有 0i,j<n0\le i,j<niji\ne j,均有线段 ii 不包含线段 jj,即 li>ljl_i>l_jri<rjr_i<r_j
  • 特殊性质 BB:对于所有 0i<j<n0\le i<j<n,均有线段 ii 包含线段 jj,或线段 ii 与线段 jj 不相交,即 liljrjril_i\le l_j\le r_j\le r_iri<ljr_i<l_jli>rjl_i>r_j
  • 特殊性质 CCnn 条线段的全部 2n2n 个端点互不相同,即 l0,l1,,ln1,r0,r1,,rn1l_0,l_1,\ldots,l_{n-1},r_0,r_1,\ldots,r_{n-1} 两两不同。

附件下载

segment.zip 805.24KB