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 }