糖糖别胡说,我真的不是签到题目(思维)

糖糖别胡说,我真的不是签到题目

https://ac.nowcoder.com/acm/problem/14583

题目描述

从前,有n只萌萌的糖糖,他们分成了两组一起玩游戏。他们会排成一排,第i只糖糖会随机得到一个能力值bi。从第i秒的时候,第i只糖糖就可以消灭掉所有排在他前面的和他不是同一组的且能力值小于他的糖糖。

为了使游戏更加有趣,糖糖的爸爸,娇姐,会发功m次,第i次发功的时间为ci,则在第ci秒结束后,b1,b2,.....,bci都会增加1.

现在,娇姐想知道在第n秒后,会有多少只糖糖存活下来。

输入描述:

第一行只有一个整数T(T<6),表示测试数据的组数。
第二行有两个整数n,m。表示糖糖的个数以及娇姐发功的次数。(1<=n<=50000,1<=bi<=1000000)
第三行到n+2行,每行有两个整数ai,bi,表示第i只糖糖属于那一组以及他的能力值。(0<=ai<=1,1<=bi<=1000000)
第n+3行到第n+m+2行,每行有一个整数ci,表示GTW第i次发功的时间.(1<=ci<=n)

输出描述:

总共T行,第i行表示第i组数据中,糖糖存活的个数。
示例1

输入

1 4 3 0 3 1 2 0 3 1 1 1 3 4

输出

3

题意

有两组人,第i秒第i个人能杀掉在它前面,不和它一组的,并且能力值比自己小的(注意一样的话是杀不死的)。并且在第ci秒时,前ci个人能力值都会+1,问第n秒存活的人数。

思路

统一到第n秒来计算生死。把应该加上的能力值全部加上,最后进行比较。因为每个人只能杀自己之前的人,而自己也就只能被后面的人杀死,所以从后往前扫描,一旦自己的能力值小于之前出现的不和自己一组的人的能力值,自己就没了,所以在此期间还要维护两个队的能力最大值。注意多组测试,需要清空数据!!

代码

//糖糖别胡说,我真的不是签到题目(思维) 
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 50010;

int b[N];
pair<int , int> a[N];

int main()
{
	int t;
	scanf("%d" , &t);
	
	while(t--)
	{
		memset(b , 0 , sizeof(b));
		
		int n , m;
		scanf("%d %d" , &n , &m);
		
		int x , y;
		for(int i = 0 ; i < n ; i++)
		{
			scanf("%d %d" , &x , &y);
			a[i] = make_pair(x , y);
		}
		
		for(int i = 0 ; i < m ; i++)
		{
			scanf("%d" , &x);
			b[x - 1]++;
		}
			
		for(int i = n - 1 ; i >= 0 ; i--)
		{
			b[i] += b[i + 1];
			a[i].second += b[i];
		}
		
		int cnt = 0;
		int max0 = -1 , max1 = -1;
		for(int i = n - 1 ; i >= 0 ; i--)
		{
			if(a[i].first == 0)
			{
				max0 = max(max0 , a[i].second);
				if(a[i].second >= max1)
					cnt++;
			}
			else
			{
				max1 = max(max1 , a[i].second);
				if(a[i].second >= max0)
					cnt++;
			}
		}
		
		printf("%d\n" , cnt);
	}
	return 0;
} 

入门课第一节习题题解

全部评论

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务