soj 1197. Hotel
2013-01-09 20:44
274 查看
题意:
给一个记忆中的字符串s,由'a'-'z','*','?'组成,'*'表示忘了一串字符(可以是0个字符),'?'表示忘了一个字符。
比如*可以表示任意字符串;?ab可以表示aab,bab等,但是不能表示aaab。
再给出N个实际的字符串t,由'a'-'z'组成,问这N个字符串有多少满足记忆中的字符串的形式。
思路:
将每一个t与s进行对比,记布尔值f[i][j]表示s[1...i]与t[1...j]相符与否,然后递推,最后s与t是否相符就是f[lens][lent]。
递推方程:
1)如果s[i] == t[j] 或者s[i] == '?',那么f[i][j] = f[i-1][j-1]
2)如果s[i] == '*',那么f[i][j] = f[i][j-1] || f[i-1][j-1] || f[i-1][j]
其中注意:1)初始化f[0][0] = true;2)当s[i] == '*' 的时候f[i][0] = f[i-1][0]要单独考虑进去。
code:
给一个记忆中的字符串s,由'a'-'z','*','?'组成,'*'表示忘了一串字符(可以是0个字符),'?'表示忘了一个字符。
比如*可以表示任意字符串;?ab可以表示aab,bab等,但是不能表示aaab。
再给出N个实际的字符串t,由'a'-'z'组成,问这N个字符串有多少满足记忆中的字符串的形式。
思路:
将每一个t与s进行对比,记布尔值f[i][j]表示s[1...i]与t[1...j]相符与否,然后递推,最后s与t是否相符就是f[lens][lent]。
递推方程:
1)如果s[i] == t[j] 或者s[i] == '?',那么f[i][j] = f[i-1][j-1]
2)如果s[i] == '*',那么f[i][j] = f[i][j-1] || f[i-1][j-1] || f[i-1][j]
其中注意:1)初始化f[0][0] = true;2)当s[i] == '*' 的时候f[i][0] = f[i-1][0]要单独考虑进去。
code:
#include <cstdio> #include <cstring> #define N 55 int n, ans; char tar , hot ; bool f ; bool match() { int tlen=strlen(tar+1), hlen=strlen(hot+1); memset(f, false, sizeof(f)); f[0][0] = true; for (int i = 1; i <= tlen; ++ i) { if (tar[i] == '*') f[i][0] = f[i-1][0]; for (int j = 1; j <= hlen; ++ j) { if (tar[i]==hot[j] || tar[i]=='?') f[i][j] = f[i-1][j-1]; else if (tar[i]=='*') f[i][j] = f[i][j-1] || f[i-1][j-1] || f[i-1][j]; } } return f[tlen][hlen]; } int main() { while (~scanf("%s", tar+1)) { ans = 0; scanf("%d", &n); while (n --) { scanf("%s", hot+1); if (match()) ans ++; } printf("%d\n", ans); } }
相关文章推荐
- SOJ 3254 Windy和水星-水星交通
- Sicily 1197. Hotel
- soj 3290 Distribute The Apples I 组合数对素数取余
- TOJ 3486 SOJ 1009 母函数
- SOJ 1014二维最大子矩阵
- soj 1343. Jam的计数法
- soj 1704. Pencils from the Nineteenth Century
- soj 1097. LED Modding
- soj 2013 weekly-2 7574-7675 7691-7593
- SOJ 4265: story of 206
- Sicily 1308 Dependencies among J (SOJ 1308) 【BFS 广度优先搜索】
- SOJ 3194: K-th
- SOJ 题目分类
- SOJ--1117: 最大整数
- SOJ 1021 Couples
- SOJ - 11598
- soj 4392 double类型的使用和二分查找
- SOJ.Opening Ceremony
- SOJ.Concatenation and substring
- soj 2800 三角形(DP)