CDOJ 763 树上的鸟儿(水题/模拟题)

原创 2015年07月09日 00:34:48

树上的鸟儿

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

作为电子科大的一员,大家都知道,我们校园有很多高大的银杏树,现在小明正在观察一棵树上的鸟儿,他发现了一些规律。

在这个树上,有一些雄鸟和雌鸟(小明很厉害,能分得出鸟儿的雄雌),假如来了一只雄鸟,它会在树上唱歌,如果p分钟内有一只雌鸟飞来和它一起唱,它们就会一直呆在树上不走了,否则p分钟之后,这只雄鸟就会飞走。假如来的是只雌鸟,如果没有落单的雄鸟在树上,它不会落到树上而是直接飞走,否则它会选择等待时间最长的雄鸟和它一起唱歌,就再也不走了。

现在小明记录了一段时间飞来这个银杏树的鸟儿,每隔一分钟可能会飞来一只雌鸟或雄鸟,或者什么都没有发生,现在小明想知道这段时间内树上最多有多少只鸟儿,你可以帮助他吗?

Input

首先输入一个正整数TT50,表示有T组数据。

每组第一行给出两个整数np,分别表示记录时间段的长度,和每个雄鸟最多能等待的时间(1<n≤1000,1≤p≤10)。

第二行为一个长度为n的字符串,由 012三种字符构成,表示这段时间内鸟儿飞来的情况,0表示没有鸟飞来,1表示来的是雄鸟,2表示来的是雌鸟。

Output

每组数据输出一行只包含一个数,表示最多的鸟儿数量。

Sample input and output

Sample Input Sample Output
5
10 1
1212121212
10 3
1111122222
16 3
2221112222211111
2 1
22
5 4
11111
10
6
9
0
4

Hint

如果在某个时刻,同时发生了鸟儿的飞进飞出,那么先有一只鸟儿飞出枝头,再由另一只鸟儿飞上枝头,参考第三组样例,第15只鸟飞上枝头的时候,第12只鸟已经离开了。第12只鸟离开的原因是因为第15只是雄鸟,如果第15只是雌鸟,第12只就不会飞走了。


此题很水,只是中了两个坑,,,刚开学时做的题,那是还很渣,不会查错,发到贴吧里,也没人回答。

然后现在会写对拍了,网上搜个代码,轻松拍出了错误,这个feel,啊,好爽。有时间把对拍发上来^_^

坑:1,不知道为什么脑子抽的分为了[0,p-1]和[p,n-1]两部分,[0,p-1]里的雌鸟就被我忽视了,真的是,傻了

2,最后的鸟儿,记录它飞走的时间,当时判了一下,如果超了n就不记录了,因为肯定飞不走了嘛,但是忘了后面如果有雌鸟,怎么判断匹配的问题,

反正p也很小,在数组后面再延长十个单位就好了啊,就能把它们都记录下来。


AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define maxn 1020
char bird[maxn];
int num[maxn];
bool fly[maxn];
int main()
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		int n, p, max;
		max = 0;
		memset(bird, 0, sizeof(char)*maxn);
		memset(num, 0, sizeof(int)*maxn);
		memset(fly, 0, sizeof(bool)*maxn);
		scanf("%d %d", &n, &p);
		scanf("%s", bird);
		for (int i = 0; i < n; i++)
		{
				if (bird[i] == '2')
				{
					for (int j = i; j < i + p; j++)
					{
						if (fly[j] == 1)
						{
							for (int k = i; k < j; k++)
								num[k]++;
							for (int k = j; k < n; k++)
								num[k] += 2;
							fly[j] = 0;
							break;
						}
					}
				}
				else if (bird[i] == '1')
				{
					fly[i + p] = 1;
					for (int j = i; j < i + p; j++)
						num[j]++;
				}
			
		}
		for (int i = 0; i < n; i++)
			if (max < num[i]) max = num[i];
		
		printf("%d\n", max);
	}
	
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

爸爸妈妈儿子女儿吃水果问题以及五个哲学家吃饭问题

在PV操作中会有一个经典的例子就是爸爸妈妈儿子女儿吃水果问题,爸爸妈妈向盘子里放入水果,儿子女儿向盘子取水果。然而爸爸只向盘子放苹果,妈妈只向盘子放橘子,女儿只能吃苹果,儿子只能吃橘子。并且盘子里只能...
  • dyllove98
  • dyllove98
  • 2013年04月12日 22:20
  • 2572

kuangbin带我飞 专题七 线段树专题(一波线段树水题,难题还不会做)

第一次学习线段树,树状数组RMQ等,努力学习,加油。 HDU 1166 题意:很清楚吧 题解:用树状数组求连续和,非常快。 #include #include #include #include...
  • Miracle_ma
  • Miracle_ma
  • 2015年07月09日 13:42
  • 1605

Link-Cut Tree(LCT) 模板总结 & 水题/模板题 动态树

1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 9352  Solved: 3783 [Submi...
  • huanghongxun
  • huanghongxun
  • 2015年11月21日 23:09
  • 1671

WYX欢乐水题赛 NOIP普及组模拟题

  • 2017年12月26日 14:17
  • 142KB
  • 下载

NOIP模拟题 [DP][二分][树剖][树上差分]

认认真真地想…… T1: 题意:求三个字符串的LCS; 分析: 开三维,只在都相等的时候考虑加1,因为每个配对点都只顺序枚举一次,所以不会漏不会重。#include #include #inc...
  • SindarDawn
  • SindarDawn
  • 2016年11月09日 20:03
  • 449

Cpp环境【CQ-NOIP2016四校联考模拟题(一)P3】树上的询问

【问题描述】   现有一棵 n 个节点的棵, 树上每条边的长度均为 1。 给出 m 个询问, 每次询问两个节 点 x,y, 求树上到 x,y 两个点距离相同的节点数量。【输入格式】   第一个...
  • ArkhamOrginal
  • ArkhamOrginal
  • 2016年10月17日 19:55
  • 320

HDU2054_A == B ?【模拟题】【大数】【水题】

题目大意:给你两个数A和B,判断A和B是否相等,若相等输出"YES", 否则输出"NO"。 思路:题目没有给出A、B的数据规模,这里就是个大数题。把A、B用 字符数组存起来,标记A、B的正负号,若为正...
  • u011676797
  • u011676797
  • 2014年11月10日 14:06
  • 829

水题:HDU-1088-Write a simple HTML Browser(模拟题)

解题心得: 1、仔细读题,细心细心。。。。。。 2、题的几个要求:超过八十个字符换一行,换行,打印一个分割线,最后打印一个新的空行。主要是输出要求比较多。 3、检验的时候可以使用文件读入和文件输出,这...
  • yopilipala
  • yopilipala
  • 2017年05月04日 21:25
  • 247

HDU1302_Snail【模拟题】【水题】

题目大意:蜗牛从井底向上爬高,井深H米,早上爬U米,晚上下滑D米,且它 从第二天开始每天疲劳,每天比第一天少F%,问最后第几天能爬出井或者不能爬 出井而失败。 思路:简单模拟,按照题目要求做就可以。...
  • u011676797
  • u011676797
  • 2014年11月20日 07:29
  • 1084

[NOIP模拟题][DP][水题][数学][树链剖分][差分序列]

T1 描述 给定3个字符串,求它们的最长公共子序列。 输入 第一行一个整数n,表示三个字符串的长度 接下来三行,每行是一个长度为n只包含小写字母的字符串。 输出 ...
  • yznoi2017
  • yznoi2017
  • 2016年11月09日 18:53
  • 146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CDOJ 763 树上的鸟儿(水题/模拟题)
举报原因:
原因补充:

(最多只允许输入30个字)