• Codeforces Round #190 (Div. 2) 水果俩水题


    后天考试,今天做题,我真佩服自己。。。

    这次又只A俩水题。。。

    orz各路神犇。。。

    话说这次模拟题挺多。。。

    半个多小时把前面俩水题做完,然后卡C,和往常一样,题目看懂做不出来。。。

    A:

    算是模拟吧,反正看懂题目后很可耻的生硬水果,没被hack我觉得非常开心。。。

    由于要求两个人至少一个没跳过,画图后发现很偷懒的方法。

    虽然跟样例不同,但过了。。。

    #include <cstdio>
    int main() {
      int n, m;
      scanf("%d%d", &n, &m);
      printf("%d
    ", n + m - 1);
      for (int i = 1; i <= m; i++)
        printf("1 %d
    ", i);
      for (int i = 2; i <= n; i++)
        printf("%d 1
    ", i);
      return 0;
    }



    B:

    本来直接全部做成最大纯色,然后考虑杂色,wa了。

    发现想错了,比如3 5 5,如果按原来想法会得出3,而它可以先做两个纯色为3 2 2,然后做2个混色为1 0 0。

    于是想出算法,比赛时没被room里面的大神没被hack,事后发现过不了新加的数据15。。。

    太晚碎觉,明天看吧。。。

    下面是原来的代码:

    #include <cstdio>
    long min(long a, long b, long c)
    {
        if (a > b)
            a = b;
        if (c > a)
            c = a;
        return c;
    }
    int main() {
        long r, g, b;
        long sum = 0;
        scanf("%ld%ld%ld", &r, &g, &b);
        sum += r/3 + g/3 + b/3;
        r % 3 == 0 ? r = 3, sum-- : r = r % 3;
        g % 3 == 0 ? g = 3, sum-- : g = g % 3;
        b % 3 == 0 ? b = 3, sum-- : b = b % 3;
        sum += min(r, g, b);
        printf("%ld
    ", sum);
        return 0;
    }

    重判错了,发现两个错误:

    当min(1, 3, 3)时返回1,其实可以做出两个的,于是改了下。

    当输入里面有0时会出错(感谢@CS_liuqing 童鞋的指出)。

    修改后A过了(蒻菜的代码很蒻):

    #include <cstdio>
    long func(long a, long b, long c)
    {
        if ((c == 1 && a == 3 && b == 3) || (b == 1 && a == 3 && c == 3) || (a == 1 && b == 3 && c == 3))
            return 2;
        if (a > b)
            a = b;
        if (c > a)
            c = a;
        return c;
    }
    int main() {
        long r, g, b;
        long sum = 0;
        scanf("%ld%ld%ld", &r, &g, &b);
        sum += r/3 + g/3 + b/3;
        if (r && g && b) {
          r % 3 == 0 ? r = 3, sum-- : r = r % 3;
          g % 3 == 0 ? g = 3, sum-- : g = g % 3;
          b % 3 == 0 ? b = 3, sum-- : b = b % 3;
          sum += func(r, g, b);
          printf("%ld
    ", sum);
        }
        else
          printf("%ld
    ", sum);
        return 0;
    }



    C:

    模拟题,其实不是。。。模拟起来必须超时。。。

    思路到后面已经有了,拖拉太久时间不够。

    三鲜大神说:A 的意思就是 kx + b = y,判断整除就可以了。

    膜拜中。

    赛后写出来的题解



    这里是只水水题的水果君,转载请注明。

    http://blog.csdn.net/hcbbt

  • 相关阅读:
    Dragon Balls_并查集
    Farm Irrigation_并查集||dfs
    The trouble of Xiaoqian_多重背包&&完全背包
    Difference Is Beautiful
    Bone Collector II_第k大背包
    Dividing_多重背包
    Milk
    coins_多重背包
    钱币兑换问题_完全背包&&拆分&&母函数
    多项式链表多项式相加
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212129.html
Copyright © 2020-2023  润新知