Google CodeJam 2016 round3-A.Teaching Assistant

题目描述:

原题是纯英文,大意是:你每天可以选择一门课去学习,选题和提交答案。题目为Coding或者Jamming。选的题目如果和老师选的一致,提交答案也匹配,最后可以得10分,若选题不一致只能得5分。若提交答案不一致要扣五分。求最大的得分总和。

题目样例:

input:

5
CCJJ
CCJJ
CJCJ
JCCJ
CCCCCC

output:

Case #1: 20
Case #2: 20
Case #3: 10
Case #4: 20
Case #5: 30

解题思路:把问题化为用栈可以解决的括号匹配问题。可以完全实现括号匹配时一组算10分,无法括号匹配时一组算5分。

这里使用了stl模板(真是太棒了!),而且提交文件的时候它检测程序会给你一个样例文本让你保存到本地文件夹,而后把输出样例放到另一个文件中。(系统只负责对答案,不负责运行),所以代码中还加入了读写文件的代码。

 1 #include<iostream>
 2 #include<stack>
 3 #include<cstdio>
 4 using namespace std;
 5 int main()
 6 {
 7     freopen("in.txt","r",stdin);
 8     freopen("out.txt","w",stdout);
 9     int t;
10     cin>>t;
11     for(int j=1; j<=t; j++)
12     {
13         stack<char>S;
14         string s;
15         cin>>s;
16         int ans=0;
17         for(int i=0; i<s.size(); i++)
18         {
19             if(S.empty()||S.top()!=s[i])
20             {
21                 S.push(s[i]);//不一致时把字符串顶端推进来
22             }
23             else //否则发生匹配
24             {
25                 S.pop();ans+=10;
26             }
27         }
28         ans+=S.size()/2*5;
29         printf("Case #%d: %d
",j,ans);
30     }
31 
32 }
原文地址:https://www.cnblogs.com/AKsnoopy/p/8303960.html