初识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 }
View Code

  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 }
View Code

  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 }
View Code

  感觉数据都是比较规范的,比如B题明确说“每行开头和结尾没有空格,每个单词仅由一个空格分割”,没有太多的陷阱,也可能因为这是让熟悉平台的缘故吧,没想难为人...

  因为这是练习,所以只需要提交输出结果就行了,可以自己选择输入规模(Small input & Large input),不同的规模分值不同。记得看引导时说在比赛时要提交结果和源码,而且从开始下载输入文件到提交是有时间限制的(针对Small input和Large input分别为4min和8min),没参加过比赛,不清楚,-_-||...

  具体的还要以后更多了解啦...

posted @ 2013-09-13 16:26  xiaobaibuhei  阅读(953)  评论(0编辑  收藏  举报