【贪心】监测点
題目描述
“多么希望有一天突然驚醒,發(fā)現(xiàn)自己是在小學(xué)的一節(jié)課上睡著了,現(xiàn)在經(jīng)歷的一切都是一場(chǎng)夢(mèng),桌上滿是你的口水。你告訴同桌,說做了一個(gè)好長(zhǎng)好長(zhǎng)的夢(mèng)。同桌罵你白癡,叫你好好聽課。你看著窗外的球場(chǎng),一切都那么熟悉,一切還充滿希望……”張琪曼通過時(shí)空監(jiān)測(cè)點(diǎn)聽到40年前的小墨老師對(duì)李旭琳這樣說。
話說張琪曼等人將歷史時(shí)間線劃分了n個(gè)區(qū)域,我們可以將之看成是數(shù)軸上的n個(gè)閉區(qū)間[ai,bi]。現(xiàn)要設(shè)置盡量少的監(jiān)測(cè)點(diǎn),使得每個(gè)區(qū)間內(nèi)都至少有一個(gè)點(diǎn)(不同區(qū)間內(nèi)含的點(diǎn)可以是同一個(gè)),請(qǐng)問需要多少個(gè)監(jiān)測(cè)點(diǎn)?
輸入
第一行為一個(gè)整數(shù)X,表示有X組數(shù)據(jù),每組數(shù)據(jù)第一行為一個(gè)整數(shù)n(N≤100),表示有n個(gè)閉區(qū)間,隨后n行每行為兩個(gè)整數(shù),表示區(qū)間左端a和右端b(0≤a≤b≤100)。
輸出
一個(gè)整數(shù),即監(jiān)測(cè)點(diǎn)個(gè)數(shù)。
樣例輸入
1
3
1 5
2 8
6 9
樣例輸出
2
分析:其實(shí)這題和上一題一樣。。。
#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
總結(jié)
- 上一篇: kotlin ?.let ?:let 连
- 下一篇: 初识EseNt