codeforces 436A. Feed with Candy 解题报告
题目链接: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 解题报告的更多相关文章
- Codeforces Educational Round 92 赛后解题报告(A-G)
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
- codeforces 476C.Dreamoon and Sums 解题报告
题目链接:http://codeforces.com/problemset/problem/476/C 题目意思:给出两个数:a 和 b,要求算出 (x/b) / (x%b) == k,其中 k 的取 ...
- Codeforces Round #382 (Div. 2) 解题报告
CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...
- codeforces 507B. Amr and Pins 解题报告
题目链接:http://codeforces.com/problemset/problem/507/B 题目意思:给出圆的半径,以及圆心坐标和最终圆心要到达的坐标位置.问最少步数是多少.移动见下图.( ...
- codeforces 500B.New Year Permutation 解题报告
题目链接:http://codeforces.com/problemset/problem/500/B 题目意思:给出一个含有 n 个数的排列:p1, p2, ..., pn-1, pn.紧接着是一个 ...
- codeforces B. Xenia and Ringroad 解题报告
题目链接:http://codeforces.com/problemset/problem/339/B 题目理解不难,这句是解题的关键 In order to complete the i-th ta ...
- codeforces 462C Appleman and Toastman 解题报告
题目链接:http://codeforces.com/problemset/problem/461/A 题目意思:给出一群由 n 个数组成的集合你,依次循环执行两种操作: (1)每次Toastman得 ...
- codeforces 460A Vasya and Socks 解题报告
题目链接:http://codeforces.com/problemset/problem/460/A 题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍 ...
- codeforces 567D.One-Dimensional Battle Ships 解题报告
题目链接:http://codeforces.com/problemset/problem/567/D 题目意思:给出 1 * n 的 field,编号从左至右依次为 1,2,...,n.问射 m 枪 ...
随机推荐
- ajaxpro实现无刷新更新数据库【简单方法】
原文发布时间为:2008-10-24 -- 来源于本人的百度文章 [由搬家工具导入] 我用的是AjaxPro.2.dll,然后我想点击那个 “无刷新更新” 那个按钮,实现 无刷新 修改表中的内容 HT ...
- [转发]Android 系统稳定性 - ANR(二)
文章都为原创,转载请注明出处,未经允许而盗用者追究法律责任. 很久之前写的了,留着有点浪费,共享之.编写者:李文栋P.S. OpenOffice粘贴过来后格式有些混乱. http://rayleeya ...
- PHP的Trait机制
PHP的Trait机制 Trait介绍: 1.自PHP5.4起,PHP实现了一种代码复用的方法,称为trait.2.Trait是为类似PHP的单继承语言二准备的一种代码复用机制.3.Trait为了减少 ...
- Linux最常用的命名
一.环境配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 vim /etc/sysconfig/network vim /etc/hostname vi ...
- Mysql 性能优化20个原则(4)
16. 垂直分割 “垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的.(以前,在银行做过项目,见过一张表有100多个字段,很恐怖) 示例一:在 ...
- BUPT复试专题—图像识别(2014-2)
题目描述 在图像识别中,我们经常需要分析特定图像中的一些特征,而其中很重要的一点就是识别出图像的多个区域.在这个问题中,我们将给定一幅N xM的图像,其中毎个1 x 1的点都用一个[0, 255]的值 ...
- Java 实现 淘宝秒杀 聚划算 自己主动提醒 源代码
说明 本实例可以监控聚划算的抢购button,在聚划算整点聚的时间到达时自己主动弹开页面(URL自定义). 能够自己定义监控持续分钟数,同一时候还能够通过多线程加快刷新速度. 源代码 package ...
- 封装算法: 模板方法(Template Method)模式
template method(模板方法)模式是一种行为型设计模式.它在一个方法中定义了算法的骨架(这种方法被称为template method.模板方法),并将算法的详细步骤放到子类中去实现.tem ...
- SpringBoot学习之快速入门创建
maven构建项目 1.访问http://start.spring.io/,进入快速创建工程的主页 可参考下图所示: 2.选择构建工具Maven Project.Spring Boot版本1.3.6以 ...
- PHP读取excel(5)
如果数据量很大的时候,就需要用PHPExcel迭代器逐行读取,具体代码如下: <?php header("Content-Type:text/html;charset=utf-8&qu ...