当前位置: 首页 > news >正文

I- yh的线段(2023河南萌新联赛第(四)场:河南大学)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

yh喜欢好线段,好线段即两条线段相交且不与其他线段重合的线段。

两条线段[l1,r1]和[l2,r2]相交(如果存在至少一个x,使得l1≤x≤r1和l2≤x≤r2,则认为两个线段相交)。

yh在数轴上有几条线段,他可以把在数轴上相交的线段结合,但是对于每个线段只能与其它线段结合一次,且不能与其它线段有重合部分,yh可以舍弃任何数量的线段。

给你nn (2≤n≤1e6)条线段,如果两条线段相交且不与其他线段相交,则由这两条线段组成的线段被称为好线段,线段不能被重复使用,但可以被舍弃任意数量的线段,请你找出好线段个数的最大值。

输入描述:

第一行包含一个正数nn (2≤n≤1e6)——线段的个数。
接下来 nn行各包含两个整数li 和 ri (0≤li≤ri≤10^9,表示n 个线段。

输出描述:

输出好线段个数的最大值。

示例1

输入

复制

5
2 2
2 8
0 10
1 2
5 6

输出

复制

1

示例2

输入

复制

7
2 4
9 12
2 4
7 7
4 8
10 13
6 8

输出

复制

3

说明

对于样例2,我们可以删除[4,8]这一条线段,然后将[2,4]和[2,4]、[6,8]和[7,7]、[9,12]和[10,13]组成三条好线段,可以看出这是最优的情况。

思路:

         将所有线段,按照右端点从小到大进行排序。找到俩俩包含的,如果后面出现想包裹住前面的直接跳过;

 当出现俩俩融合一线段之后,又出现一条直线想包含其中一条直线,那直接跳过


 

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<stack>
#include<string>
#include<algorithm>
#include<unordered_map>
#include<map>
#include<bitset>
#include<cstring>
#include <unordered_set>
//#include<priority_queue>
#include<queue>
#include<deque>
#include<set>
#include<stdlib.h>
#define dbug cout<<"hear!"<<endl;
#define rep(a,b,c) for(ll a=b;a<=c;a++)
#define per(a,b,c) for(ll a=b;a>=c;a--)
#define no cout<<"NO"<<endl;
#define yes cout<<"YES"<<endl;
#define endl "\n"
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//priority_queue<int,vector<int>,greater<int> >q;
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> PII;
typedef pair<long double,long double> PDD;ll  INF = 0x3f3f3f3f;
//const ll LINF=LLONG_MAX;
// int get_len(int x1,int y1,int x2,int y2)
// {
//   return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1);
// }
const ll N = 1e6+ 10;
const ll mod1 =998244353;
const ll mod2 =1e9+7;
const ll hash_num = 3e9+9;
ll n,m,ca, k,ans;
ll arr[N],brr[N],crr[N];
//ll h[N],ne[N],e[N],w[N],book[N],idx;struct node
{ll l, r;
}noda[N];bool cmp(node a,node b)
{if(a.r==b.r){return a.l>b.l;}return a.r<b.r;
}void solve()
{cin >> n;rep(i,1,n){cin >> noda[i].l >> noda[i].r;}sort(noda+1,noda+1+n,cmp);ll ans=0;ll f=-1,r=-1;// cout << endl;// rep(i,1,n)// {//     cout << noda[i].l <<"  "<<noda[i].r<<endl;// }// cout << endl;rep(i,1,n){if(noda[i].l<=f)continue;else if(noda[i].l<=r){ans++;f=noda[i].r;}else{r=noda[i].r;}// cout << f << "  "<<r<<endl;}cout << ans;
}int main()
{IOS;ll _;_=1;//get_eulers();//scanf("%lld",&_);//cin>>_;ca=1;while(_--){solve(); ca++;}    return 0;
}

http://www.lryc.cn/news/107884.html

相关文章:

  • python与深度学习(十四):CNN和IKUN模型二
  • chrome扩展在popup、background、content之间通信解决传输文件问题
  • Oracle获取创建对象的DDL脚本
  • 《算法竞赛·快冲300题》每日一题:“01树”
  • Mac提示文件:已损坏,无法打开。你应该把它移到废纸篓
  • 探索嵌入式系统:从入门到实践
  • 网络安全知识点整理(作业2)
  • idea数据库快速上手-库操作与表结构和数据操作
  • 当“国潮”遇见“双语” 以传承之心种下一颗文化的种子
  • 计划管理与项目管理:有何区别?
  • 个人信息保护合规审计如何做?
  • HTTP杂谈之Referer和Origin请求头再探
  • 数学建模-爬虫入门
  • HSRM各表
  • Ansible自动化运维工具 —— Playbook 剧本
  • 第二章:多态
  • C++面向对象设计基础
  • Linux定时运行sh脚本,如果sh文件已经在运行,则忽略本次运行
  • SpringBoot项目中的web安全防护
  • stm32和python串口数据收发
  • 无涯教程-jQuery - Dropable移动函数
  • 【Python】Web学习笔记_flask(4)——钩子函数
  • JavaScript 原型链解析,宏任务和微任务
  • 05|Oracle学习(UNIQUE约束)
  • glide加载content://com.android.contacts图片源码粗略梳理
  • 【机器学习】Feature Engineering and Polynomial Regression
  • Rust- 变量绑定
  • 向“数”而“深”,联想凌拓的“破局求变”底气何来?
  • pytorch实战-图像分类(二)(模型训练及验证)(基于迁移学习(理解+代码))
  • b 树和 b+树的理解