A. Yet Another Problem with Strings

题意:

给出$n$个字符串$S_i$,要求支持两种操作:

  • 在第$i$个字符串后增加一个字符$c$
  • 给出一个字符串$T$,询问是否有一个串$S_i$是$T$的子串。

强制在线,保证$\sum S_i, \sum T \leq 2 \cdot 10^5$

 

思路:

考虑暴力做法即枚举每个$S_i$然后询问$T$中的每个等长的子串是否等于$S_i$。

但是一个小优化是可以把所有长度相同的$S_i$放在一起做,用std::map记录哈希值。

并且注意到$\sum S_i \leq 2 \cdot 10^5$,所以所有的$S_i$只有$\sqrt{2 \cdot 10^5}$种长度。

暴力即可。

 

B. Pen Pineapple Apple Pen

Solved.

题意:将一个序列合并成一个数。

思路:分类讨论一下, 水。

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 const int maxn = 1e5 + 10;
 6 
 7 char str[maxn];
 8 
 9 bool solve()
10 {
11     int len = strlen(str + 1);
12     if(len == 1) return true;
13     while(len % 2 == 0) len = len >> 1;
14     if(len != 1) return false;
15     len = strlen(str + 1);
16     for(int i = 1; i <= len; i += 2) if(str[i] != 'P' && str[i + 1] != 'P') return false;
17     return true;
18 }
19 
20 int main()
21 {
22     int t;
23     scanf("%d", &t);
24     while(t--)
25     {
26         scanf("%s", str + 1);
27         puts(solve() ? "YES" : "NO");
28     }
29     return 0;
30 }
View Code

相关文章: