2016 google code jam round 3
problem 1 teaching assistant
问题描述:有一个AI评分系统,你第一天向他申请题目,第二天向他提交题目。你有两种mood可以选择:coding、jamming。但是AI会根据你申请的mood和提交的mood与它所处的mood是否一致来打分。
第一天申请:
- 当你申请与它的mood一致时,它将你的题最高分设为10分。
- 当你的申请的mood和它不一致时,他将你的选题最高分选为5分。
第二天提交
- 当你提交的与它的mood一致他给你最高分10。
- 当你提交的和他不一致给你5分。
样例:
第一天,你申请了coding,AI的mood是coding,他会给你的题设置为最高10分。
第二天,你提交的题是coding,和AI的mood相匹配也是coding,它给你最高分10分。
第三天,你申请的题是jamming,而此时AI的mood是coding,他会给你的题目设定最高分是5分。
第四天,你提交的题目是jamming,而此时AI的mode也是jamming的话,他给你最高分5分。
exampel
input _ _ ouput
5
CCJJ _ Case #1: 20
CJCJ _ Case #2: 10
CJJC _ Case #3: 20
CJJJ _Case #4: 15
CCCCCC _Case #5: 30
分析,这其实就是一个匹配的问题。用栈来保存数据。如果是与AI的mood匹配就将字符弹出,如果不同就保留。最后来计算。
实现:
1/*gogle code jam 2016 round 3 teaching assistant
2 * using stack to store the difreences.
3 */
4 #include <iostream>
5 #include <stack>
6 #include <cstdio>
7
8 using namespace std;
9
10
11
12 int main(){
13 freopen("in.txt","r",stdin);
14 freopen("out.txt","w",stdout);
15 int t;
16 cin >> t;
17 for (int i = 1;i <= t; ++i){
18 string s;
19 stack<char> S;
20 int an = 0;
21 cin >> s;
22 for (int i = 0;i < s.size(); ++i){
23 if(S.top() != s[i] || S.empty())
24 S.push(s[i]);
25 else {
26 S.pop(); //store the char unmatched.
27 an +=10;
28 }
29 }
30 an += S.size() / 2 * 5;
31 printf("case #%d %d\n",i,an);
32 }
33 return 0;
34
35 }
~
~

260

被折叠的 条评论
为什么被折叠?



