【2014年鄞州区】小幸福(e.pas/c/cpp)

本文介绍了一种计算在特定条件下幸福时刻长度的算法。通过记录每个小朋友的玩耍时间,算法确定至少有K个小朋友同时玩耍的时刻,即幸福时刻,并计算这些时刻的总长度。文章提供了三种实现方法,包括直接计数、线段树优化和快速排序优化。

题目描述:

有n个小朋友,他们商量在保证作业做完的前提下去玩。第i个小朋友的可以玩耍时间为Si~ Ti。这里Si~Ti
表示的是时间段,比如Si=2,Ti=4,那么意味着这位小朋友在时刻1不能玩,时刻2、3、4可以去玩,时刻4以后都不能出去玩。如果在某个时刻,在一起玩的小朋友个数不少K个,那么这一时刻就是幸福的。现在你要求出所有幸福的时刻长度。

输入

三行 第一行:n k  (n个小朋友,一起玩的小朋友达到k个为幸福)
第二行:S1 S2 ... Sn
第三行:T1 T2 ... Tn

输出

一行:幸福时刻的长度

样例输入
4 3
1 2 2 4
5 2 4 6

样例输出
2

数据范围限制

50% n<=1000 1<=Si<=Ti<=1000
100% n<=100000 1<=Si<=Ti<=1000000000

提示

时刻                1  2  3  4  5  6
第一个小朋友玩耍时间:X  X  X  X  X
第二个小朋友玩耍时间:   X
第三个小朋友玩耍时间:   X  X  X
第四个小朋友玩耍时间:         X  X  X
第2分钟和第4分钟一起玩耍的小朋友达到了3个所以是幸福的时刻,幸福时刻长度为2。

50分思路:

这题50分思路还是计较简单的, 直接用一个数组把所有时刻的人数存入,最后再判断,每个时刻如果大于k,那ans++。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,s[1000001],t[1000001],ans,bz[1000001];
int main()
{
   
   
	freopen("e.in","r",stdin);
	freopen("e.out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<=n;i++)
		cin>>s[i];
	for(int i=1;i<=n;i++)
		cin>>t[i];
	for(int i=1;i<=n;i++)
		for(int j=s[i];j<=t[i];j++)
			if(bz[j]==-1) continue;
			else
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值