Practice Round China New Grad Test 2014 报告

  今天有Google of Greater China Test for New Grads of 2014的练习赛,主要是为了过几天的校园招聘测试做练习用的,帮助熟悉平台,题目嘛,个人觉得除了A题外,B和C就是练习基本编程的。

A题:Bad Horse二分图判定问题。话说昨晚刚简单看了一下代码,写都没写过,只好翻书抄代码了...还是有点幸运的,如果昨天没看,这个题估计就要留白了...感觉还有好多东西没学啊...

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <vector>
 5 #include <string>
 6 #include <map>
 7 using namespace std;
 8 #define MAXN 100*2+10
 9 
10 map<string, int> node;
11 vector<int> G[MAXN];
12 int color[MAXN];
13 
14 void create_node(string s)
15 {
16     if (!node.count(s))
17     {
18         int t = node.size() + 1;
19         node[s] = t;
20     }
21 }
22 
23 bool bipartite(int u)
24 {
25     for (int i = 0; i < G[u].size(); i++)
26     {
27         int v = G[u][i];
28         if (color[v] == color[u])  return false;
29         if (!color[v])
30         {
31             color[v] = 3 - color[u];
32             if (!bipartite(v))  return false;
33         }
34     }
35     return true;
36 }
37 int main()
38 {
39 #ifdef LOCAL
40     //freopen("in", "r", stdin);
41     freopen("A-small-2-attempt0.in", "r", stdin);
42     freopen("A-small-2.out", "w", stdout);
43 #endif
44     int T;
45     scanf("%d", &T);
46     for (int kase = 1; kase <= T; kase++)
47     {
48         int n;
49         scanf("%d", &n);
50         node.clear();
51         for (int i = 0; i < MAXN; i++)
52             G[i].clear();
53         for (int i = 0; i < n; i++)
54         {
55             string name1, name2;
56             cin >> name1 >> name2;
57             create_node(name1);
58             create_node(name2);
59             G[node[name1]].push_back(node[name2]);
60             G[node[name2]].push_back(node[name1]);
61         }
62         memset(color, 0, sizeof(color));
63         color[1] = 1;
64         if (bipartite(1))  printf("Case #%d: Yes\n", kase);
65         else  printf("Case #%d: No\n", kase);
66     }
67     return 0;
68 }
View Code

  B题:Captain Hammer

  关于抛物线的,给一物体的初速度和要抛的距离,计算抛出时与水平线的最小夹角。直接套公式。

 1 #include <cstdio>
 2 #include <cmath>
 3 #define PI 3.1415926
 4 
 5 int main()
 6 {
 7 #ifdef LOCAL
 8     //freopen("in", "r", stdin);
 9     freopen("B-small-attempt0.in", "r", stdin);
10     freopen("B-small.out", "w", stdout);
11 #endif
12     int T;
13     scanf("%d", &T);
14     for (int kase = 1; kase <= T; kase++)
15     {
16         int v, d;
17         scanf("%d%d", &v, &d);
18         double t = (d*9.8) / (2*v*v);
19         double angle = asin(2*t);
20         double ans = angle / PI * 180 / 2;
21         printf("Case #%d: %.7lf\n",kase, ans);
22     }
23     return 0;
24 }
View Code

  C题:Moist

  给n个字符串,对第i个字符串作如下判断:该字符串前面(包括本身)是否有序,如果无序,对前i个字符串排序。最后统计排序的次数。

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <string>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 string str[110];
 9 
10 int main()
11 {
12 #ifdef LOCAL
13     //freopen("in", "r", stdin);
14     freopen("C-small-2-attempt0.in", "r", stdin);
15     freopen("C-small-2.out", "w", stdout);
16 #endif
17     int T;
18     scanf("%d", &T);
19     for (int kase = 1; kase <= T; kase++)
20     {
21         int n;
22         scanf("%d", &n);
23         getchar();
24         for (int i = 0; i < n; i++)
25             getline(cin, str[i]);
26         int cnt = 0;
27         for (int i = 1; i < n; i++)
28             if (str[i] < str[i-1])
29             {
30                 cnt++;
31                 sort(str, str+i+1);
32             }
33         printf("Case #%d: %d\n", kase, cnt);
34     }
35     return 0;
36 }
37             
View Code

  做第一题的时候感觉时间有些紧张,因为要在四分钟内改一下文件的重定向还要提交(练习都是Small Input),后来就把东西写好了再下载输入文件^_^。其实正常时间还是足够的,不过还是有一次不小心写错文件名,结果得到一个空的输出文件,只能眼睁睁地看着倒计时变为0...

posted @ 2013-09-14 19:26  xiaobaibuhei  阅读(572)  评论(2编辑  收藏  举报