Shift-And算法
- 用于每一位可以匹配多个字符的情况
- 使用
bitset实现 kmp思想寻找模式串的前缀与匹配串后缀的最大匹配长度
Regular Number
题意
模式串每位可以匹配0-9的多个数字
输出与模式串匹配的匹配串
思路
waring :在输入输出字符串的时候puts和gets会快很多
- 先用
bitset记录每种值所在的位置
for (int i = 0; i < 10; i++)
num[i].reset();
for (int i = 1; i <= n; i++) {
int k, x;
scanf("%d", &k);
for (int j = 1; j <= k; j++) {
scanf("%d", &x);
num[x].set(i);
}
}
-
按位匹配,若有一位经过
n次匹配为真,即成立 -
例如,对于样例
4 3 0 9 7 2 5 7 2 2 5 2 4 5 097554205249第一匹配为1,当匹配第2位时恰好匹配9所代表的字符串第2位
int len = strlen(s + 1);
for (int i = 1; i <= len; i++) {
p = p << 1;
p.set(1);
p &= num[s[i] - '0'];
if (p[n]) {
char temp = s[i + 1];
s[i + 1] = '\0';
puts(s + i - n + 1);
s[i + 1] = temp;
}
}
874

被折叠的 条评论
为什么被折叠?



