题目链接:http://codeforces.com/contest/436/problem/A

题目意思:给出 n 颗只有两种类型:fruit 和 caramel的candies,这些candies是挂在屋子上的,对于第 i 颗candy,它离地面为 hi 厘米,质量为 mi;有只叫Om Nom的怪兽想尽可能地把这些candy吃光,它初始的时候只能跳 x 的高度,如果有某颗或者一些candy离地面的距离 <= x,就代表Om Nom可以吃掉,吃掉之后它下一次可以跳的高度会变成 x + mi(mi代表某颗低于 x 厘米的candy 的质量),也就是增加 mi。

  以下注释部分大家可以忽略,谨纪念一个做题年轻的我回首不堪的做题往事......

  /******************************************

总的来说,就是经历了一番纠缠!!!不过后来有种终于看清楚问题本质的感觉,真是超级美好。就像坐海盗船~~咯!!呵呵.....

是这样的,每种candy有两个数限制:h 和 m,我很容易地想到要对 h 从小到大排序,如果 h 相等的话,就对m从大到小排序,因为怪兽要跳到上去的条件就是这个怪兽所能跳的高度 >= 这颗candy的高度,排完之后,问题就转移到要选择哪种类型的candy了。我竟然直接根据两种类型的第一颗来讨论,当中还有n 多的重复代码(当时是这样想的,先要保证能解决,有时间才开始优化),于是就,死就死了,果不其然- -.....第一次比赛写那么长的代码...第二次修改还是没有走出这个坑,还自鸣得意地把一些重复情况合在一起= =;紧接着就是傻到竟然把一些 h 相同的candy过滤掉,剩下那颗m最大的candy,把m加到当前的x上!哇~~~我的天啊= =。 200+ 的代码,还过不了,看来真的不是状态啊

*********************************************/

就这样,一直过不了pretest 8,后来才发现大数据啊!于是看人家过了的数据,原来对于这类的数据过不了:

5 2

  0 2 4

  1 3 1

  0 8 3

  0 20 10

  1  5  5

注意 0 2 4 和 1 3 1 这两行数据,按我的做法,1 3 1 比 1 5 5 排得前,也就是先选择1 3 1 而不选择 1 5 5,这样的话,选了1 3 1 之后这只怪兽就再也不能吃到candy了!只能吃到2颗,而答案应该是4颗。所以解决这个问题的关键就是:对于小于当前x(x = x + mi 或者初始的 x)的那些candy,选择 m 最大的那颗先吃。数据量不大,2000而已,2s跑2000 * 2000,绰绰有余了。

出题分类是模拟,本人觉得有点像贪心。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int maxn = + ;
int t[maxn], h[maxn], m[maxn];
bool used[maxn]; int main()
{
int n, x;
while (scanf("%d%d", &n, &x) != EOF)
{
for (int i = ; i < n; i++)
scanf("%d%d%d", &t[i], &h[i], &m[i]);
int ans = ;
for (int i = ; i < ; i++) // 看从哪种糖果开头吃比较好
{
memset(used, false, sizeof(used));
int curx = x;
int curtype = i;
int curid = ;
int curans = ;
while (true)
{
int curm = -;
for (int j = ; j < n; j++)
{
if (!used[j] && t[j] == curtype && curx >= h[j] && curm <= m[j])
{
curm = m[j]; // 在高度 < curm的前提下,找出最大的m
curid = j;
}
}
if (curm == -) // 已经找不到比curx 要 低的candy就退出
break;
used[curid] = true; // 标记该糖果已吃
curans++; // 累计糖果数
curx += curm; // 更新之后能跳的高度
curtype ^= ; // 控制糖果类型
}
ans = max(ans, curans);
}
printf("%d\n", ans);
}
return ;
}

codeforces 436A. Feed with Candy 解题报告的更多相关文章

  1. Codeforces Educational Round 92 赛后解题报告(A-G)

    Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...

  2. codeforces 476C.Dreamoon and Sums 解题报告

    题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...

  3. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  4. codeforces 507B. Amr and Pins 解题报告

    题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...

  5. codeforces 500B.New Year Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...

  6. codeforces B. Xenia and Ringroad 解题报告

    题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...

  7. codeforces 462C Appleman and Toastman 解题报告

    题目链接:http://codeforces.com/problemset/problem/461/A 题目意思:给出一群由 n 个数组成的集合你,依次循环执行两种操作: (1)每次Toastman得 ...

  8. codeforces 460A Vasya and Socks 解题报告

    题目链接:http://codeforces.com/problemset/problem/460/A 题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍 ...

  9. codeforces 567D.One-Dimensional Battle Ships 解题报告

    题目链接:http://codeforces.com/problemset/problem/567/D 题目意思:给出 1 * n 的 field,编号从左至右依次为 1,2,...,n.问射 m 枪 ...

随机推荐

  1. 实战分析Tomcat的类加载器结构(使用Eclipse MAT验证)

    一.前言 在各种Tomcat相关书籍,书上都提到了其类加载器结构: 在Tomcat 7或者8中,共享类和Catalina类加载器在catalina.properties中都是没配置的,请看: 所以,c ...

  2. 【AIM Tech Round 5 (Div. 1 + Div. 2) 】

    A:https://www.cnblogs.com/myx12345/p/9844152.html B:https://www.cnblogs.com/myx12345/p/9844205.html ...

  3. yii 之增加数据

    模型代码: <?php namespace app\models; use yii\db\ActiveRecord; class Test extends ActiveRecord{ publi ...

  4. UTF-8 编码的文件在处理时要注意 BOM 文件头问题

    最近在给项目团队开发一个基于 Java 的通用的 XML 分析器时,设计了一个方法,能够读取现成的 XML 文件进行分析处理,当然 XML 都是采用 UTF-8 进行编码的.但是在用 UltraEdi ...

  5. luogu P1032 字串变换

    题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...

  6. java集合系列之ArrayList源码分析

    java集合系列之ArrayList源码分析(基于jdk1.8) ArrayList简介 ArrayList时List接口的一个非常重要的实现子类,它的底层是通过动态数组实现的,因此它具备查询速度快, ...

  7. Docker 的CMD与ENTRYPOINT区别

    我们在构建一个docker镜像的时候,Dockerfile里面有两个命令会引起我们的注意,它们就是 CMD 和 ENTRYPOINT,看起来很相似,实际上并非如此. 一.CMD 顾名思义就是允许用户指 ...

  8. 吃我一记咸鱼突刺——使用板载RTC定时开机

    前言 原创文章,转载引用务必注明链接.水平有限,欢迎指正. 2016年3月30日 Lemuntu(Base On Jessie) 3.10.37 原载于Lemaker论坛.汇总于此. 看ATC2603 ...

  9. CMS - tabBar

    Tips:如果网页图片(文字)看不清,请按CTRL+鼠标滚轮 1.建议使用阿里图库 或者 easyicon 2.建议使用81*81且低于40KB的图片(建议jpg) 3.如需查看脑图结构,请点击:ta ...

  10. 一篇很好的讲解SIFT算法的文章

    http://blog.csdn.net/zddblog/article/details/7521424