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 枪 ... 
随机推荐
- jQuery事件委托之Safari失效的解决办法--摘抄
			什么是事件委托 事件委托是Jquery中一种事件绑定的方式,不同于常见的事件绑定方式将事件绑定在目标元素上,而是将事件绑定在父级元素上通过事件冒泡来执行绑定函数. //常见的事件绑定(Jquery) ... 
- Objective C语言中nil、Nil、NULL、NSNull的区别
			以下内容是基于搜集整理的网上资料,供参考. nil:指向Objective C语言中对象的空指针,其定义值为(id)0. Nil:指向Objective C语言中类(Class)的空指针,其定义值为( ... 
- Java运算基础
			计算机对负数的运算 = 先取绝对值的原码----> 然后取反,----->+1 这是负数的补码表示 例如 -5 5的原码= 0000,0101 取反 1111,1 ... 
- getpixel 取色
			HWND hwnd = ::FindWindow(NULL,"<天龙八部OL>"); CRect rect; CString strTmp; if (hwnd != N ... 
- MACBOOK 忘记密码
			如果没有系统安装盘,可以采用下面的几种方法:首先,启动机器,启动时按住Apple和S键,以单用户模式(single user mode)进入系统.输入:mount -uv / 然后回车.接下来可以采用 ... 
- Linux下sh/bash/source/.命令的区别(转)
			一..sh文件介绍 .sh为Linux的脚本文件,我们可以通过.sh执行一些命令,可以理解为windows的.bat批处理文件. 二.点命令(.) .命令和source是同一个命令,可以理解为sour ... 
- 老系统优化同步导入10w+Excel数据 秒级
			背景:老系统asp.net 2.0项目使用客户反应,某个业务每个月导入数据操作很慢,大致需要15-30分钟才会导入完毕: 分析:导入慢的原因: .数据量过大,且采用的是同步,单个excel shee ... 
- 论DATASNAP结合FIREDAC的使用方法
			论DATASNAP结合FIREDAC的使用方法 自DELPHI XE5开始引入FIREDAC数据引擎以来,FIREDAC就正式成为了官方的数据引擎.一直到XE10.1 UPDATE1,据笔者观察,FI ... 
- webstorm bable
			一.设置npm源 1.得到原本的镜像地址 npm get registry > https://registry.npmjs.org/ 设成淘宝的 npm config set registry ... 
- Intel Edision —— 从SSH无法连接到systemd
			前言 原创文章,转载引用务必注明链接.如有疏漏,欢迎斧正. 最近在试用Wyliodrin,安装过程中出现了两个问题,一是无法使用SSH登录到Edison:二是EDISON磁盘的问题.分别涉及到syst ... 
