1324:【例6.6】整数区间

1324:【例6.6】整数区间

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 1614     通过数: 1020

【题目描述】

请编程完成以下任务:

1.从文件中读取闭区间的个数及它们的描述;

2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数。

【输入】

首行包括区间的数目n,1≤n≤10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0≤a≤b≤10000,它们是某一个区间的开始值和结束值。

【输出】

第一行集合元素的个数,对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少。

【输入样例】

4
3 6
2 4
0 2
4 7

【输出样例】

2

主要还是贪心

吧区间按endtime排列,分别取最后一个数然后砍一部分,一个个的砍

#include<iostream>
#include<algorithm>
using namespace std;
struct xx{
    int s,e;
};
xx a[10005];
int n;
bool cmp(xx x1,xx x2){
    return x1.e<x2.e;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i].s>>a[i].e;
    }
    sort(a,a+n,cmp);
    int ss=0,i=1,ans=1;
    while(i<n){
        if(a[ss].e>=a[i].s){
            i++;
            continue;
        }
        if(a[ss].e<a[i].s){
            ans++;
            ss=i;
            i++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/yfr2zaz/p/10356901.html

时间: 2024-10-03 22:56:05

1324:【例6.6】整数区间的相关文章

整数区间

整数区间请编程完成以下任务: 1.从文件中读取闭区间的个数及它们的描述: 2.找到一个含元素个数最少的集合,使得对于每一个区间,都至少有一个整数属于该集合,输出该集合的元素个数. [输入] 首行包括区间的数目n,1<=n<=10000,接下来的n行,每行包括两个整数a,b,被一空格隔开,0<=a<=b<=10000,它们是某一个区间的开始值和结束值.[输出]第一行集合元素的个数,对于每一个区间都至少有一个整数属于该区间,且集合所包含元素数目最少.[样例输入] 4 3 6 2

B - 整数区间

B - 整数区间 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Description 一个整数区间[a,b](a < b),是一个从a到b连续整数的集合. 现在给你n个整数区间,编程找出一个集合R,使得n个集合中的每个集合都有2个整数出现在R中,并且这个集合R包含的整数个数最少. Input 第一行包含整数n(1 <= n <= 10000),表示整数区间的个数

求一个整数区间(从1到n)内1出现的次数

题目描述 求出1-13的整数中1出现的次数,并算出100-1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数). 暴力解法 比较简单的解法是从1到n顺次遍历,每遍历到一个数,依次求其每一位是否为1 //暴力法,时间复杂度是O(nlogn) // 遍历1~n,不断迭代检查各位是不是1 in

求两个整数区间的累加和(递归方法)

int main() { int n,m; int k=0; scanf("%d %d",&n,&m); k=sum(n,m); printf("%d\n",k); return 0; } int sum(int n,int m){ if(n<m){ return sum(n,m-1)+m; }else{ return n; } }

区间DP经典模型

http://blog.csdn.net/y990041769/article/details/24238547 先附上一个链接 后面有引用的代码 概述 区间 DP:是指在一段区间上进行的一系列动态规划. 对于区间 DP 这一类问题,我们需要计算区间 [1,n] 的答案,通常用一个二维数组 dp 表示,其中 dp[x][y] 表示区间 [x,y]. 有些题目,dp[l][r] 由 dp[l][r-1] 与 dp[l+1][r] 推得; 也有些题目,我们需要枚举区间 [l,r]内的中间点,由两个子

区间DP [NYOJ 737] 石子合并(一)

石子合并(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述     有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆.求出总的代价最小值. 输入 有多组测试数据,输入到文件结束.每组测试数据第一行有一个整数n,表示有n堆石子.接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开 输出 输出总代价的最小值,占单

【RMQ问题】求数组区间最大值

转自:http://blog.csdn.net/lilongherolilong/article/details/6624390 先挖好坑,明天该去郑轻找虐 RMQ(Range Minimum/Maximum Query)问题是求区间最值问题.你当然可以写个O(n)的(怎么写都可以吧=_=),但是万一要询问最值1000000遍,估计你就要挂了.这时候你可以放心地写一个线段树(前提是不写错)应该不会挂.但是,这里有更简单的算法,就是ST算法,它可以做到O(nlogn)的预处理,O(1)地回答每个询

Swift语言指南(三)--语言基础之整数和浮点数

整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,32,64位形式的有符号和无符号的整数,这些整数遵循与C语言相似的命名规则.如8位无符号整数的类型为UInt8,32位有符号整数的类型为Int32,和Swift语言的其它类型一样,这些整型命名以大写字母开头. 整数的边界 你可以通过min或max属性为每一个整数类型指定一个最小值或最大值: 1 let 最小值 = UInt8.min // 最小值 等于 0,

C/C++算法竞赛入门经典Page11 例题1-5 三整数排序

题目:输入3个整数,从小到大排序后输出 样例输入: 20 7 33 样例输出: 7 20 33 首先,先声明三个整数a,b,c和一个临时变量t: int a,b,c,t;//1,b,c为三个整数,t为临时变量 输入三个整数: scanf("%d%d%d",&a,&b,&c); 进行3次if判断: 1.如果b>a,则a,b对调 2.如果c>a,则a,c对调 3.如果c>b,则b,c对调 代码: if(b>=a){ t=b; b=a; a=t