共42道题,当前是第20

初赛真题

给定一个字符串 $S$,有 $q$ 组询问,每次给定一个字符串 $T$,求字符串 $T$ 是否是 $S$ 中的一个子序列。

数据保证 $1 \leq |S| \leq 10^5, 1 \leq \sum{|T|} \leq 10^6$ ,所有字符串仅包含小写字母。

#include <iostream>
using namespace std;

const int BASE = 26;

string S, T;
int q, Pos[100005][BASE];

int main(){
	cin >> S;
	int n = S.size();
	for (int i = 0; i < BASE; i++)
		___(1)___ = -1;
	for (int i = n - 1; i >= 0; i--){
		for (int j = 0; j < BASE; j++)
			___(2)___;
		___(3)___;
	}
	cin >> q;
	while (q--){
		cin >> T;
		int len = T.size(), now = 0;
		for (int i = 0; ___(4)___; i++)
			now = ___(5)___;
		if (now != -1)
			cout << "YES\n";
		else
			cout << "NO\n";
	}
	return 0;
}

1. D。 $Pos[n][i]$ 初始化 
2. B。 预处理字符串 $S$
3. A。 预处理字符串 $S$
4. D。 遍历字符串 $T$,如果 $now = 1$ 时,字符串 $T$ 不是字符串 $S$ 的子串
5. B。 迭代更新 $now$

Question

1. (1) 处应填()

2. (2) 处应填()

3. (3) 处应填()

4. (4) 处应填()

5. (5) 处应填()

陈伦制作 版权所无 粤ICP备16127491号-1