GESP4级考试语法知识(贪心算法(四))

整数区间1代码:

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct node
{
	int l,r;
}a[1001];
bool cmp(node a,node b)
{
	return a.r<b.r;
};
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].l>>a[i].r;
	}
	sort(a,a+n,cmp);
	int temp=0,ans=1;
	for(int i=1;i<n;i++)
	{
		if(a[temp].r>=a[i].l) continue ;
		else
		{
			temp=i;
			ans++;
		}
	}
	cout<<ans<<endl;
 	return 0;
}

整数区间2代码:

cpp 复制代码
#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
	int x,y,s;
	bool operator < (const node &p)const
	{
		if(y<p.y) return 1;
		else if(y==p.y&&x<=p.x) return 1;
		return 0;
	}
} a[10005],t;
int main()
{
	int n,i,j,sum=0;
	scanf("%d",&n);
	for(i=1; i<=n; i++)
		{
			scanf("%d%d",&a[i].x,&a[i].y);
			a[i].s=2;//标记该闭区间剩下需要的元素
		}
	sort(a+1,a+n+1);//排序
	for(i=1; i<=n; i++)
		{
			if(a[i].s>0)   //a[i]可用
				{
					a[i].s--;//a[i]所需的元素-1
					for(j=i+1; j<=n; j++)   //该元素在其他闭区间是否存在
						{
							if(a[i].y>=a[j].x&&a[i].y<=a[j].y)
								a[j].s--;
						}
					sum++;
					if(a[i].s>0)   //再进行一次判断
						{
							a[i].s--;
							for(j=i; j<=n; j++)
								{
									if(a[i].y-1>=a[j].x&&a[i].y-1<=a[j].y)
										a[j].s--;
								}
							sum++;
						}
				}
		}
	printf("%d",sum);
}
相关推荐
格林威10 分钟前
工业相机 SDK 在 Docker 容器中的部署与权限配置(含 USB/GigE)
开发语言·人工智能·数码相机·计算机视觉·docker·容器·工业相机
哎嗨人生公众号13 分钟前
手写求导公式,让轨迹优化性能飞升,150ms变成9ms
开发语言·c++·算法·机器人·自动驾驶
foundbug99917 分钟前
STM32 内部温度传感器测量程序(标准库函数版)
stm32·单片机·嵌入式硬件·算法
Hello.Reader17 分钟前
为什么学线性代数(一)
线性代数·算法·机器学习
code_whiter20 分钟前
C++6(模板)
开发语言·c++
_深海凉_24 分钟前
LeetCode热题100-找到字符串中所有字母异位词
算法·leetcode·职场和发展
一只旭宝27 分钟前
【C++ 入门精讲1】初始化、const、引用、内联函数 | 超详细手写笔记(附完整代码)
开发语言·c++
木井巳28 分钟前
【递归算法】目标和
java·算法·leetcode·决策树·深度优先
旖-旎35 分钟前
哈希表(字母异位次分组)(5)
数据结构·c++·算法·leetcode·哈希算法·散列表
XiYang-DING36 分钟前
【Java】二叉搜索树(BST)
java·开发语言·python