牛客 华华听月月唱歌 (贪心算法)

A-华华听月月唱歌

分析:

先对数据排序,再用贪心算法进行模拟,在前面可以接上的前提上,尽可能得使结尾更长。

代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    
    
	int n, m, mi = 0, ma = 0, res = 0;//mi为此时实际的末尾,mi+1为模拟的开头,ma为模拟时的最大结尾
	pair <int, int> pie[100007];
	scanf("%d%d", &n, &m);
	for (int i = 0; i<m; i++)
	{
    
    
		scanf("%d%d", &pie[i].first, &pie[i].second);
	}
	sort(pie, pie + m);//按开始位置大小排序

	for (int i = 0; i<m; i++)
	{
    
    
		if (pie[i].first>ma + 1)//此时接不上模拟的末尾,说明断了。
		{
    
    
			printf("-1");
			break;
		}
		if (pie[i].first>mi + 1)//此时接不上实际的末尾,说明要把模拟实际接上。
		{
    
    
			res++;
			mi = ma;
		}
		if (pie[i].first <= mi + 1)//正常的模拟,模拟出最大结尾。
		{
    
    
			ma = max(ma, pie[i].second);
			if (ma >= n)
			{
    
    
				printf("%d", res + 1);//既然结尾达到了,直接接上并结束循环。
				break;
			}
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43700916/article/details/88427126
今日推荐