【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. \((1,2),(1,3),(1,4),(2,3)\)
  2. \((1,2),(1,3),(1,4),(2,4)\)
  3. \((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\)

posted @ 2023-08-13 14:24  _Unnamed  阅读(117)  评论(0)    收藏  举报