• 第九届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了几发,好亏。

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

  • 相关阅读:
    我修改/收藏的CSDN知识.(asp.net JavaScript)
    哪里摔倒就在哪里躺下
    显示存储过程的名称、创建时间、修改时间
    Flash Builder 初试(二)绑定和双向绑定
    C#支持中文的格式化字符长度方法
    Flash Builder 初试(一)信息提示窗口
    Flash Builder 初试(三) 使用摄像头
    Null Object 模式
    开放封闭原则(OCP)
    面向对象设计5大准则
  • 原文地址:https://www.cnblogs.com/denghaiquan/p/6885429.html
Copyright © 2020-2023  润新知