码迷,mamicode.com
首页 > 其他好文 > 详细

【贪心】监测点

时间:2018-07-20 23:38:54      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:algo   open   数据   监测   ++   size   content   多少   def   

题目描述

“多么希望有一天突然惊醒,发现自己是在小学的一节课上睡着了,现在经历的一切都是一场梦,桌上满是你的口水。你告诉同桌,说做了一个好长好长的梦。同桌骂你白痴,叫你好好听课。你看着窗外的球场,一切都那么熟悉,一切还充满希望……”张琪曼通过时空监测点听到40年前的小墨老师对李旭琳这样说。

话说张琪曼等人将历史时间线划分了n个区域,我们可以将之看成是数轴上的n个闭区间[ai,bi]。现要设置尽量少的监测点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个),请问需要多少个监测点?

 

输入

第一行为一个整数X,表示有X组数据,每组数据第一行为一个整数n(N≤100),表示有n个闭区间,随后n行每行为两个整数,表示区间左端a和右端b(0≤a≤b≤100)。

 

输出

一个整数,即监测点个数。

 

样例输入

1
3
1 5
2 8
6 9

样例输出

2

分析:其实这题和上一题一样。。。

技术分享图片
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
pair<int,int>aa[115];
int n,ans,t;
void init(){
    cin>>t;
}
void swap(int&a,int&b){
    int tmp=a;
    a=b;
    b=tmp;
}
bool cmp(pair<int,int>a,pair<int,int>b){
    return a.second<b.second||a.second==b.second&&a.first<b.first;
}
void solve(){
    while(t--) {
        cin >> n;
        int s, e;
        range(i, 1, n) {
            cin >> s >> e;
            if (s > e)swap(s, e);
            aa[i].first = s;
            aa[i].second = e;
        }
        sort(aa + 1, aa + 1 + n, cmp);
        ans = 1;
        int pos = 1;
        range(i, 2, n)
            if (aa[i].first > aa[pos].second) {
                ++ans;
                pos = i;
            }
        cout << ans << endl;
    }
}
int main() {
    init();
    solve();
    return 0;
}
View Code

 

【贪心】监测点

标签:algo   open   数据   监测   ++   size   content   多少   def   

原文地址:https://www.cnblogs.com/Rhythm-/p/9344297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!