第九届ECNU Coder A.足球锦标赛

题目链接:http://acm.ecnu.edu.cn/contest/16/problem/A/

 

题目:

  

A. 足球锦标赛

Time limit per test: 2.0 seconds

Time limit all tests: 2.0 seconds

Memory limit: 256 megabytes

Accept / Submit: 130 / 496

ECNU 足球锦标赛采用了最传统的计分牌来计分。每进一个球,计分员给对应的队要翻牌,使得计分板上显示的数加一。

如上图所示,计分板上的每一位都按顺序挂了 0 到 9 这 10 个牌子,所以可以表示 000 至 999。当其中一个队的得分从 010 变成 011 时,计分员只要将最后一位的最前面的牌子向后翻即可,共需翻动一块牌子;当得分从 019 变成 020 是,由于 9 后面已经没有牌子了,所以计分员要将 0 到 9 全部翻到前面,并将倒数第二位的牌子 1 翻到后面,所以共需翻动 10 块牌子。

现场的计分牌和图中所示还是存在差异的,现场的计分牌会很大,很重,所以翻每块牌子都要消耗 1 点体力。

你是计分员,现在比赛还剩下最后十分钟。现在有一个预言家告诉你在这十分钟里,双方得分共计多少;但他没有告诉你双方得分各是多少。所以你想要知道你要花费的体力值最多是多少。

Input

第一行给出数据组数 T (1T1 000)。接下来对于每组数据有两行:

第一行是两个三位数 A,B (0A,B999)(含前导 0),形如 001013123,表示双方现在的得分。

第二行是一个整数 K (0Kmin{999A,999B}),表示双方在最后十分钟的得分之和。

Output

对于每组数据,输出 Case x: y。其中 x 是从 1 开始的测试数据编号,y 是一个整数,表示花费体力最多是多少。

Examples

input
2
009 009
2
001 003
2
output
Case 1: 20
Case 2: 2

Note

样例 1 解释:有三种情况。

  • 甲方(前者)得 2 分,乙方(后者)得 0 分;甲方要翻 10+1=11 次。
  • 甲方和乙方各得 1 分,共要翻 10+10=20 次。
  • 乙方得 2 分,同样翻 11 次。

所以最多要翻 20 次。

  

题解:

   暴力枚举甲的得分 i,乙的得分为 K-i。

   分别算甲的翻动和乙的翻动。

  

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <string>
 7 #include <vector>
 8 #include <map>
 9 #include <set>
10 #include <stack>
11 #include <queue>
12 #include <sstream>
13 #include <algorithm>
14 using namespace std;
15 #define pb push_back
16 #define mp make_pair
17 #define ms(a, b)  memset((a), (b), sizeof(a))
18 #define eps 0.0000001
19 typedef long long LL;
20 typedef unsigned long long ULL;
21 const int inf = 0x3f3f3f3f;
22 const LL INF = 0x7fffffff;
23 const int maxn = 1e6+10;
24 const int mod = 1e9+7;
25 int kase = 1;
26 void init() {
27 
28 }
29 int cnt(string s, int get)
30 {
31     int ans = 0;
32     while(get>0){
33         while(s[2]<'9'&&get>0){
34             s[2]++;
35             ans++;
36             get--;
37         }
38         if(s[2]=='9'&&get>0&&s[1]!='9'){
39             ans+=10;
40             get--;
41             s[2] = '0';
42             s[1]++;
43         }
44         else if(s[2]=='9'&&get>0&&s[1]=='9'){
45             ans += 19;
46             get--;
47             s[2] = '0';
48             s[1] = '0';
49             s[0]++;
50         }
51     }
52     return ans;
53 }
54 void solve() {
55     int K;
56     string A, B;
57     cin >> A >> B >> K;
58     int ans = -inf;
59     for(int i = 0;i<=K;i++){
60         int Aget = i;
61         int Bget = K-i;
62         ans = max(ans, cnt(A, Aget)+cnt(B, Bget) );
63     }
64     cout << "Case " << kase++ << ": " << ans << endl;
65 }
66 int main() {
67 #ifdef LOCAL
68     freopen("input.txt", "r", stdin);
69 //      freopen("output.txt", "w", stdout);
70 #endif // LOCAL
71     int T;
72     cin >> T;
73     while(T--){
74         init();
75         solve();
76     }
77     return 0;
78 }
View Code

 

个人总结:

  一开始以为是贪心。没有多想就去贪了。连wa几发,然后看了一下Note发现tips是暴力,就直接写了,有个地方忘记写get-- wa了几发,好亏。

 

你努力的时候,比你厉害的人也在努力。

 

posted @ 2017-05-21 17:44  Dh_q  阅读(265)  评论(0编辑  收藏  举报