【LGR-151-Div.2】洛谷 8 月月赛 II & YsOI2023 题面
同学不想要报名比赛,让我把题面给他....
T1
前缀和
题目背景
Ysuperman 模板测试的试机题。
小心立秋,小心秋丽。
题目描述
立秋有一个长度为 \(n\) 的数组 \(a\),所有数字都是正整数,并且除了其中第一个数字以外其它数字都等于前面所有数字的和。
例如,数组 \([1,1,2,4,8,16]\) 就有可能是立秋有的一个数组,因为除了第一个数字 \(1\),后面的每个数字都是前面数字的和,例如:
- 第二个数字 \(1=1\)。
- 第三个数字 \(2=1+1\)。
- 第四个数字 \(4=1+1+2\)。
- 第五个数字 \(8=1+1+2+4\)。
- 第六个数字 \(16=1+1+2+4+8\)。
现在立秋告诉了秋丽数字 \(x\) 存在于这个数组中,秋丽希望知道 \(a_n\) 最小会是多少,或者说整个数组最后一个数字最小有多少。
输入格式
本题有多组测试数据。
输入第一行一个数字 \(T\) 表示测试数据组数。
接下来 \(T\) 行每行两个正整数 \(n,x\)。
输出格式
输出共 \(T\) 行,分别表示每组测试数据的答案。
对于某组数据 \(n,x\),输出一行一个正整数表示可能的最小的 \(a_n\)。
样例 #1
样例输入 #1
3
2 2
3 2
4 2
样例输出 #1
2
2
4
样例 #2
样例输入 #2
3
3 1
3 2
3 4
样例输出 #2
2
2
4
样例 #3
样例输入 #3
3
2 6
3 6
4 6
样例输出 #3
6
6
12
样例 #4
样例输入 #4
3
3 3
3 6
3 12
样例输出 #4
6
6
12
提示
样例 1 解释
- 第一组数据只有唯一可能的数组 \([2,2]\),所以答案为 \(2\);
- 第二组数据有两种可能的数组,分别是 \([2,2,4]\) 和 \([1,1,2]\),所以答案为 \(2\);
- 第三组数据有两种可能的数组,分别是 \([2,2,4,8]\) 和 \([1,1,2,4]\),所以答案为 \(4\)。
样例 2 解释
- 第一组数据只有唯一可能的数组 \([1,1,2]\),所以答案为 \(2\);
- 第二组数据有两种可能的数组 \([1,1,2]\) 和 \([2,2,4]\),所以答案为 \(2\);
- 第三组数据有两种可能的数组 \([2,2,4]\) 和 \([4,4,8]\),所以答案为 \(4\)。
数据范围
对于前 \(30\%\) 的数据,满足 \(x\) 不能被 \(2\) 整除,或者说 \(2\) 不是 \(x\) 的一个因数,或者说 \(x\) 是奇数。
另有 \(30\%\) 的数据,满足 \(x\) 可以被 \(2^{n-2}\) 整除,或者说 \(2^{n-2}\) 是 \(x\) 的一个因数。
另有 \(20\%\) 的数据,满足 \(x\le 1000\),可以证明在这个数据范围下答案可以使用一个 int 类型变量存储。
对于 \(100\%\) 的数据,满足 \(1\le T\le 10^4\),\(2\le n\le 20\),\(1\le x\le 10^9\)。
T2
区间翻转区间异或和
题目背景
Ysuperman 模板测试的数据结构题。
符卡可以是人名也可以是队名。
题目描述
符卡有一个长度为 \(n\) 的整数数组 \(a\),符卡认为一个区间 \([l,r]\) 是灵异区间当且仅当 \(\bigoplus_{i=l}^ra_i=0\),或者说这个区间内所有数字异或起来刚好等于 \(0\)。
符卡有特殊的魔法,可以把任意一个灵异区间翻转。具体来说,如果 \([l,r]\) 区间是灵异区间,那么符卡就可以对这个区间使用魔法,整个数组就会变成 \(a_1,a_2,\dots,a_{l-1},a_r,a_{r-1},\dots,a_l,a_{r+1},a_{r+2}\dots,a_n\)。
现在符卡可以使用任意次数的魔法,符卡希望最后得到的数组的灵异区间数量能够尽可能多,你能告诉她最后最多有多少个灵异区间吗?
输入格式
第一行一个正整数 \(n\),表示数组长度。
第二行 \(n\) 个非负整数 \(a_1,a_2,\dots,a_n\) 表示整个数组。
输出格式
输出一行一个整数,表示符卡使用任意次魔法后灵异区间最多有多少个。
样例 #1
样例输入 #1
3
1 1 1
样例输出 #1
2
样例 #2
样例输入 #2
4
3 1 2 3
样例输出 #2
2
提示
样例 1 解释
无论符卡发动多少次魔法,数组都是 \(1,1,1\),所以发不发动魔法都没有任何关系。灵异区间永远都是 \([1,2],[2,3]\) 两个。
样例 2 解释
这里给出可能的一种魔法发动方法。
选择灵异区间 \([1,3]\) 发动魔法,得到的新数组是 \(2,1,3,3\),这个数组共有两个灵异区间,分别是 \([1,3]\) 和 \([3,4]\)。
可以证明答案无法超过 \(2\)。
数据范围
对于前 \(20\%\) 的数据,保证 \(n\le 10\)。
对于前 \(40\%\) 的数据,保证 \(n\le 2000\)。
另有 \(10\%\) 的数据,保证 \(a_i\) 全部相等。
另有 \(10\%\) 的数据,保证 \(a_i\) 只有两种可能的取值。
另有 \(10\%\) 的数据,保证 \(0\le a_i<2^{10}\)。
对于 \(100\%\) 的数据,满足 \(1\le n\le 10^5\),\(0\le a_i< 2^{20}\)。
彩蛋
灵异区间的名字其实是“零异(或)区间”的谐音。
T3
广度优先遍历
题目背景
Ysuperman 模板测试的图论题。
【数据删除】
题目描述
今天的模板测试是无向图上的广度优先遍历,【数据删除】马上写好了代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 100005;
vector<int> G[maxn];
queue<int> q;
int pa[maxn];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= m; ++i)
{
int u, v;
cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
memset(pa, -1, sizeof pa);
q.push(1);
pa[1] = 0;
while (!q.empty())
{
int u = q.front();
q.pop();
for (auto v : G[u])
{
if (pa[v] != -1)
continue;
pa[v] = u;
q.push(v);
}
}
for (int i = 1; i <= n; ++i)
{
cout << pa[i];
if (i != n)
cout << " ";
}
cout << endl;
return 0;
}
如你所见,这份代码会输入一个 \(n\) 个点 \(m\) 条边的无向图,并且求出这张图以 \(1\) 为根的一棵“广度优先遍历树”,最后输出所有点的父亲节点编号。
不过值得注意的是,这棵“广度优先遍历树”的具体形态和“边的输入顺序”有关,也就是说,不同的输入顺序可能会得到不同的父亲节点编号。
现在【数据删除】告诉了你 \(n,m\)、这 \(m\) 条边以及在某个“边输入顺序”情况下他的代码的输出,你需要还原出这个“边输入顺序”。如果有多种边输入顺序对应的都是这样的输出,你只需要输出其中任意一种即可。
特别的,保证有解,且无向图连通,无自环(但是有可能有重边)。
输入格式
第一行两个正整数 \(n,m\) 分别表示无向图的点数和边数。
接下来 \(m\) 行每行两个整数 \(u,v\) 表示存在 \(u\) 与 \(v\) 之间存在一条无向边。
最后一行 \(n\) 个整数表示【数据删除】代码的输出。(由题意可知他输出的是某个“边输入顺序”情况下他得到的“广度优先遍历树”中 \(1\sim n\) 这些节点的父亲节点编号)
输出格式
输出包含 \(m\) 行,每行两个整数 \(u,v\) 表示 \(u\) 和 \(v\) 之间存在一条无向边,你的输出顺序表示你给出的“边输入顺序”。
请注意,你需要保证如果输入给出的图中 \(u,v\) 间连了 \(k\) 条边,那么你给出的图中 \(u,v\) 间也要连有 \(k\) 条边。
如果有多种“边输入顺序”合法,输出其中任意一种都会被判断为正确。另外,由于是无向边,所以你输出的一条边两个点的排列顺序对答案判定没有影响。
样例 #1
样例输入 #1
4 4
2 1
1 3
2 4
4 3
0 1 1 3
样例输出 #1
1 3
3 4
1 2
2 4
样例 #2
样例输入 #2
8 9
7 8
6 1
5 4
7 1
4 1
3 7
2 6
7 5
2 4
0 6 7 1 4 1 1 7
样例输出 #2
6 2
7 3
4 5
1 6
7 8
1 4
1 7
2 4
5 7
提示
样例 1 解释
直接运行【数据删除】的代码即可。
如果不改变边输入顺序,将下面数据输入【数据删除】的代码:
4 4
2 1
1 3
2 4
4 3
他的代码跑出来结果如下:
0 1 1 2
如果按照样例1输出给出的顺序,即,将下面数据输入他的代码:
4 4
1 3
3 4
1 2
2 4
输出为:
0 1 1 3
数据范围
对于前 \(10\%\) 的数据,满足 \(n\le 8\),\(m\le 10\)。
对于前 \(40\%\) 的数据,满足 \(n\le 1000\),\(m\le 2000\)。
另有 \(10\%\) 的数据,满足 \(m=n-1\)。
对于 \(100\%\) 的数据,满足 \(1\le n\le 10^5\),\(1\le m\le 2\times 10^5\)。
提示
为什么有可能会有重边,因为懒得去重了,这个家伙出图论题就是懒得判重边的()
T4
连通图计数
题目背景
Ysuperman 模板测试的多项式题。
【数据删除】
题目描述
请问有多少个 \(n\) 个点 \(m\) 条边的无向简单连通图,无自环无重边,满足删掉编号为 \(i\) 的点后无向图被分成了 \(a_i\) 个连通块。特殊地,我们保证 \(n-1\le m\le n+1\),且答案不为 \(0\)。
答案对 \(998,244,353\) 取模。
输入格式
第一行两个整数 \(n,m\)。
第二行 \(n\) 个整数,第 \(i\) 个整数为 \(a_i\)。
输出格式
输出一行一个整数,表示答案对 \(998,244,353\) 取模得到的结果。
样例 #1
样例输入 #1
4 4
2 1 1 1
样例输出 #1
3
样例 #2
样例输入 #2
4 5
1 1 1 1
样例输出 #2
6
样例 #3
样例输入 #3
5 6
1 1 2 1 1
样例输出 #3
27
样例 #4
样例输入 #4
6 6
1 2 3 1 1 1
样例输出 #4
30
样例 #5
样例输入 #5
6 5
2 1 1 1 1 4
样例输出 #5
4
样例 #6
样例输入 #6
8 7
1 1 3 1 2 2 2 2
样例输出 #6
360
样例 #7
样例输入 #7
8 8
1 1 1 1 2 2 2 2
样例输出 #7
2520
样例 #8
样例输入 #8
8 9
1 1 1 1 1 1 2 3
样例输出 #8
9240
样例 #9
样例输入 #9
10 11
1 1 1 4 2 2 2 1 1 1
样例输出 #9
105840
样例 #10
样例输入 #10
12 13
1 1 1 1 1 1 1 1 1 1 1 1
样例输出 #10
518269694
提示
样例 1 解释
共有三种可能的图,连的四条边分别为:
- \((1,2),(1,3),(1,4),(2,3)\)。
- \((1,2),(1,3),(1,4),(2,4)\)。
- \((1,2),(1,3),(1,4),(3,4)\)。
数据范围
| 测试点编号 | \(n,m\) | 特殊性质 |
|---|---|---|
| \(1\sim 4\) | \(m=n-1\) | 无 |
| \(5\sim 6\) | \(m=n\),\(n\le 7\) | 无 |
| \(7\sim 8\) | \(m=n\) | \(a_i=1\) |
| \(9\sim 12\) | \(m=n\) | 无 |
| \(13\sim 14\) | \(m=n+1\),\(n\le 7\) | 无 |
| \(15\sim 16\) | \(m=n+1\) | \(a_i=1\) |
| \(17\sim 20\) | \(m=n+1\) | 无 |
对于所有的数据,满足 \(4\le n\le 10^5\),\(n-1\le m\le n+1\),\(1\le a_i<n\),\(n\le \sum_{i=1}^na_i\le 2n-2\),且保证答案非 \(0\)。

浙公网安备 33010602011771号