zoukankan      html  css  js  c++  java
  • 线段(segment)

    【问题描述】
    在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少。

    【输入格式】
    输入文件segment.in的第1行为一个正整数n,下面n行每行2个数字ai,bi,描述每条线段。

    【输出格式】
      输出文件segment.out仅包括1个整数,为k的最大值

    【样例输入】
    3
    0 2
    2 4
    1 3
    【样例输出】
    2

    【数据范围】
    对于20%的数据,n≤10;
    对于50%的数据,n≤1000;
    对于70%的数据,n≤100000;
    对于100%的数据,n≤1000000,0≤ai<bi≤1000000。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,ans=0;
    struct point
    {
    	int x,y;
    };
    point p[1000001];
    bool cmp(point a,point b)
    {
    	return a.y<b.y;
    }
    int main()
    {
    	freopen("segment.in","r",stdin);
    	freopen("segment.out","w",stdout);
    	cin >> n;
    	int t=0;
    	for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
    	sort(p+1,p+1+n,cmp);
    	for(int i=1;i<=n;i++)
    		if(p[i].x>=t)
    		{
    			ans++;
    			t=p[i].y;
    		}
    	cout << ans<< endl;
    	return 0;
    }
    
  • 相关阅读:
    注意
    被虐的很惨
    在cmd中可以运行java,但是不能用javac
    Linux常用命令
    安装JDK和eclipse
    重装win7
    小希的迷宫
    并查集——The Suspects
    BFS宽度优先搜索
    括号匹配
  • 原文地址:https://www.cnblogs.com/LJA001162/p/13446987.html
Copyright © 2011-2022 走看看