Google kickstart 2017 Round A

Problem A. Square Counting

数由格点组成的所有正方形个数, 正方形的边可以不和坐标轴平行。

对于每个由个点组成的正方形,存在一个最小的格点正方形,这个正方形的边平行于坐标轴。

考虑边长为k的平行于坐标轴的格点正方形,它正好是k个正方形的最小外接正方形。因此总的正方形个数是sum[(r-k)*(c-k)*k], 1  <= k <= min(r, c)

 

Problem B. Patterns Overlap

因为*代表0个或者最多4个字符,将*展开成”****“,每个*匹配0个或者1个字符。然后动态规划判断两个pattern是否可以相同。

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 using namespace std;
 5 
 6 
 7 void solve() {
 8     string t1, t2, s2, s1;
 9     cin >> t1 >> t2;
10     for (auto c : t1) {
11         if (c == '*') s1 = s1 + "****"; else s1 = s1 + c;
12     }
13 
14     for (auto c: t2) {
15         if (c == '*') s2 = s2 + "****"; else s2 = s2 + c;
16     }
17     int n = s1.size();
18     int m = s2.size();
19     vector<vector<int>> f(n+1, vector<int>(m+1));
20     f[0][0] = 1;
21     for (int i = 0; i <= n; i++) {
22         for (int j = 0; j <= m; j++) {
23             if (i > 0 && j > 0) {
24                 f[i][j] = f[i-1][j-1] && (s1[i-1] == s2[j-1] || s1[i-1] == '*' || s2[j-1] == '*');
25                 if (s1[i-1] == '*') f[i][j] = f[i][j] || f[i-1][j];
26                 if (s2[j-1] == '*') f[i][j] = f[i][j] || f[i][j-1];
27             } else if (i == 0 && j != 0) {
28                 if (s2[j-1] == '*') {
29                     f[i][j] = f[i][j-1];
30                 }
31             } else if (i != 0 && j == 0) {
32                 if (s1[i-1] == '*') {
33                     f[i][j] = f[i-1][j];
34                 }
35             }
36         }
37     }
38 
39     if (f[n][m]) cout <<"TRUE"; else cout <<"FALSE";
40 }
41 
42 int main()
43 {
44     int cases;
45     std::ios::sync_with_stdio(false);
46     cin >> cases;
47     for (int i = 1; i <= cases; i++) {
48         cout <<"Case #" << i << ": ";
49         solve();
50         cout << endl;
51     }
52     return 0;
53 }

 

Problem C. Space Cubes

这题爆0了。。

可以考虑二维平面的状态。两个正方形框要分别cover(左上,右下)或者(左下,右上),此时二分正方形框的边长,总的时间复杂度是O(nlog(n))

在三维的状态下,应当有左右,上下,前后可以组合,共有四种状态要cover。依然二分正方形框的边长,时间复杂度O(nlog(n))

 

这题我只考虑了八种里的四种,可能是爆0的原因。

 

posted @ 2017-03-05 22:08  zeeroo32  阅读(473)  评论(0编辑  收藏  举报