今天有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 ", kase); 65 else printf("Case #%d: No ", kase); 66 } 67 return 0; 68 }
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 ",kase, ans); 22 } 23 return 0; 24 }
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 ", kase, cnt); 34 } 35 return 0; 36 } 37
做第一题的时候感觉时间有些紧张,因为要在四分钟内改一下文件的重定向还要提交(练习都是Small Input),后来就把东西写好了再下载输入文件^_^。其实正常时间还是足够的,不过还是有一次不小心写错文件名,结果得到一个空的输出文件,只能眼睁睁地看着倒计时变为0...