#P17140. [NOI 2026] 线段

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

[NOI 2026] 线段

题目描述

小 LL 有 nn 条包含于 [1,m][1,m] 的线段,其中第 ii(0≤i<n0\le i<n)条线段为 [li,ri][l_i,r_i](1≤li≤ri≤m1\le l_i\le r_i\le m)。

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

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

小 LL 想知道有多少线段集合是优美的,因此他给定了一个正整数 kk(k≤nk\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=0,asa_s(1≤s≤k1\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+2(0≤i<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.in 与 segment/segment2.ans。

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

【样例 33】

见选手目录下的 segment/segment3.in 与 segment/segment3.ans。

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

【样例 44】

见选手目录下的 segment/segment4.in 与 segment/segment4.ans。

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

【样例 55】

见选手目录下的 segment/segment5.in 与 segment/segment5.ans。

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

【样例 66】

见选手目录下的 segment/segment6.in 与 segment/segment6.ans。

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

【样例 77】

见选手目录下的 segment/segment7.in 与 segment/segment7.ans。

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

【数据范围】

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

  • 1≤t≤201\le t\le20;
  • 1≤n≤30001\le n\le3000,1≤m≤1031\le m\le10^3,1≤k≤n1\le k\le n,K≤200K\le200;
  • 对于所有 0≤i<n0\le i<n,均有 1≤li≤ri≤m1\le l_i\le r_i\le m。

::cute-table{tuack}

测试点编号 n≤n\le m≤m\le K≤K\le k≤k\le 特殊性质
1∼31\sim3 2020 10210^2 2020 无
4,54,5 30003000 10310^3 200200 22 ^
6∼86\sim8 ^ ^ 33
9,109,10 500500 200200 AA
11∼1511\sim15 30003000 ^ BB
16∼1816\sim18 200200 500500 5050 CC
19∼2119\sim21 500500 10310^3 200200 ^
22,2322,23 10310^3 10210^2 3030 无
24,2524,25 30003000 10310^3 200200 ^
  • 特殊性质 AA:对于所有 0≤i,j<n0\le i,j<n 且 i≠ji\ne j,均有线段 ii 不包含线段 jj,即 li>ljl_i>l_j 或 ri<rjr_i<r_j。
  • 特殊性质 BB:对于所有 0≤i<j<n0\le i<j<n,均有线段 ii 包含线段 jj,或线段 ii 与线段 jj 不相交,即 li≤lj≤rj≤ril_i\le l_j\le r_j\le r_i、ri<ljr_i<l_j 或 li>rjl_i>r_j。
  • 特殊性质 CC:nn 条线段的全部 2n2n 个端点互不相同,即 l0,l1,…,ln−1,r0,r1,…,rn−1l_0,l_1,\ldots,l_{n-1},r_0,r_1,\ldots,r_{n-1} 两两不同。

附件下载

segment.zip 805.24KB