初识Google code jam平台
为了熟悉一下code jam的平台,今天简单试了一下,做了一下Qualification Round Africa 2010的三道题目,都是很基础的。
A题:给一个数n和一系列数a[],从a[]中找出两个数的和等于n,输出这两个数的下标。
1 #include <cstdio> 2 #define MAXN 2010 3 4 int p[MAXN]; 5 6 int main() 7 { 8 #ifdef LOCAL 9 freopen("A-large-practice.in", "r", stdin); 10 freopen("A.out", "w", stdout); 11 #endif 12 int T; 13 scanf("%d", &T); 14 for (int kase = 1; kase <= T; kase++) 15 { 16 int c, n; 17 scanf("%d%d", &c, &n); 18 for (int i = 1; i <= n; i++) 19 scanf("%d", &p[i]); 20 int i, j; 21 for (i = 1; i <= n; i++) 22 for (j = i+1; j <= n; j++) 23 if (p[i] + p[j] == c) goto s; 24 s: printf("Case #%d: %d %d\n", kase, i, j); 25 } 26 return 0; 27 }
B题:给出一行字母和空格组成的字符串,每个单词以空格隔开,将单词逆序输出。
1 #include <cstdio> 2 #include <iostream> 3 #include <cctype> 4 #include <vector> 5 using namespace std; 6 7 int main() 8 { 9 #ifdef LOCAL 10 freopen("B-large-practice.in", "r", stdin); 11 freopen("B.out", "w", stdout); 12 #endif 13 int T; 14 scanf("%d", &T); 15 getchar(); 16 string str; 17 vector<string> v; 18 for (int kase = 1; kase <= T; kase++) 19 { 20 v.clear(); 21 getline(cin, str); 22 for (int i = 0; i < str.size(); i++) 23 { 24 string t = ""; 25 while (i < str.size() && isalpha(str[i])) 26 { 27 t += str[i]; 28 i++; 29 } 30 v.push_back(t); 31 } 32 printf("Case #%d:", kase); 33 for (int i = v.size()-1; i >= 0; i--) 34 cout << " " << v[i]; 35 printf("\n"); 36 } 37 return 0; 38 }
C题:关于T9键盘的,给出一个字符输入序列(只含小写字母和空格),输出对应的按键序列。
1 #include <cstdio> 2 #include <cstring> 3 #include <cctype> 4 5 int main() 6 { 7 #ifdef LOCAL 8 freopen("C-large-practice.in", "r", stdin); 9 freopen("C.out", "w", stdout); 10 #endif 11 int table[26][2]; 12 for (int i = 0; i < 15; i++) 13 { 14 table[i][0] = i / 3 + 2; 15 table[i][1] = i % 3 + 1; 16 } 17 for (int i = 15; i < 19; i++) 18 { 19 table[i][0] = 7; 20 table[i][1] = i - 14; 21 } 22 for (int i = 19; i < 22; i++) 23 { 24 table[i][0] = 8; 25 table[i][1] = i - 18; 26 } 27 for (int i = 22; i < 26; i++) 28 { 29 table[i][0] = 9; 30 table[i][1] = i - 21; 31 } 32 int T; 33 scanf("%d", &T); 34 getchar(); 35 char str[1100]; 36 for (int kase = 1; kase <= T; kase++) 37 { 38 gets(str); 39 int pre = -1; 40 int len = strlen(str); 41 printf("Case #%d: ", kase); 42 for (int i = 0; i < len; i++) 43 { 44 if (str[i] == ' ') 45 { 46 if (pre == 0) printf(" "); 47 printf("0"); 48 pre = 0; 49 } 50 else if (isalpha(str[i])) 51 { 52 int t = str[i] - 'a'; 53 if (table[t][0] == pre) printf(" "); 54 for (int j = 0; j < table[t][1]; j++) 55 printf("%d", table[t][0]); 56 pre = table[t][0]; 57 } 58 } 59 printf("\n"); 60 } 61 return 0; 62 }
感觉数据都是比较规范的,比如B题明确说“每行开头和结尾没有空格,每个单词仅由一个空格分割”,没有太多的陷阱,也可能因为这是让熟悉平台的缘故吧,没想难为人...
因为这是练习,所以只需要提交输出结果就行了,可以自己选择输入规模(Small input & Large input),不同的规模分值不同。记得看引导时说在比赛时要提交结果和源码,而且从开始下载输入文件到提交是有时间限制的(针对Small input和Large input分别为4min和8min),没参加过比赛,不清楚,-_-||...
具体的还要以后更多了解啦...