【 2013 Multi-University Training Contest 8 】
2013-08-15 18:20
441 查看
HDU 4678 Mine
对于每个空白区域,求SG值。
最后异或起来等于0,先手必败。
View Code
对于每个空白区域,求SG值。
最后异或起来等于0,先手必败。
#include<cstdio> #include<cstring> #include<vector> #define MAXN 1010 using namespace std; char a[MAXN], b[MAXN], c[MAXN]; vector<pair<int, int> > p1, p2; int f[MAXN][MAXN], g[MAXN][MAXN]; void cal(char a[], char c[], vector<pair<int, int> >&p) { int i, j, k; int la = strlen(a + 1); int lc = strlen(c + 1); p.clear(); for (i = 1; i <= la; i++) { k = 1; if (a[i] != c[k]) { continue; } for (j = i; j <= la; j++) { if (a[j] == c[k]) { k++; } if (k > lc) { break; } } if (k > lc) { p.push_back(make_pair(i, j)); } } } int main() { int T; int ca = 1; int ans; int i, j; int la, lb, lc; scanf("%d", &T); while (T--) { scanf(" %s %s %s", a + 1, b + 1, c + 1); la = strlen(a + 1); lb = strlen(b + 1); lc = strlen(c + 1); cal(a, c, p1); cal(b, c, p2); ans = 0; if (!(p1.empty() || p2.empty())) { memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); for (i = 1; i <= la; i++) { for (j = 1; j <= lb; j++) { if (a[i] == b[j]) { f[i][j] = f[i - 1][j - 1] + 1; } else { f[i][j] = max(f[i - 1][j], f[i][j - 1]); } } } for (i = la; i > 0; i--) { for (j = lb; j > 0; j--) { if (a[i] == b[j]) { g[i][j] = g[i + 1][j + 1] + 1; } else { g[i][j] = max(g[i + 1][j], g[i][j + 1]); } } } for (i = 0; i < (int) p1.size(); i++) { for (j = 0; j < (int) p2.size(); j++) { ans = max(ans, lc + f[p1[i].first - 1][p2[j].first - 1] + g[p1[i].second + 1][p2[j].second + 1]); } } } printf("Case #%d: %d\n", ca++, ans); } return 0; }
View Code
相关文章推荐
- HDU 4609 3-idiots(FFT优化 + 计数方法)——2013 Multi-University Training Contest 1
- 2013 Multi-University Training Contest 1 I-number
- 2013 Multi-University Training Contest 1 Vases and Flowers HDU 4614
- 2013 Multi-University Training Contest 7 解题报告(更新中)
- HDU 4609 3-idiots(FFT优化 + 计数方法)——2013 Multi-University Training Contest 1
- Partition(hdu4651)2013 Multi-University Training Contest 5----(整数拆分一)
- 2013 Multi-University Training Contest 1
- 2013 Multi-University Training Contest 1——I-number
- Partition(hdu4651)2013 Multi-University Training Contest 5
- 2013 Multi-University Training Contest 1 3-idiots
- 2013 Multi-University Training Contest 1 Cards
- 2013 Multi-University Training Contest 3 解题报告(更新中)
- 2013 Multi-University Training Contest 1――I-number
- 【 2013 Multi-University Training Contest 7 】
- 2013 Multi-University Training Contest 7
- 2013 Multi-University Training Contest 9
- 2013 Multi-University Training Contest 3
- 【 2013 Multi-University Training Contest 4 】
- 2013 Multi-University Training Contest 5 Partition
- 2013 Multi-University Training Contest 5