YTU.2372: 給牛照相
阿新 • • 發佈:2018-12-27
2372: 給牛照相
時間限制: 1 Sec 記憶體限制: 128 MB
提交: 82 解決: 24
[提交][狀態][討論版][命題人:外部匯入]
題目描述
農夫約翰想給他的N (2 <= N <= 1,000,000,000) 頭牛照相,這些牛站成一排分別編號為1..N。每張照片可以拍攝連續的一些牛,並且約翰想讓每頭牛至少出現在一張照片上。
不幸的是有一些牛脾氣不合,不想出現在同一張照片上,不合的牛有K(1 <= K <= 1000)對。給出這K對不合關係,算一下約翰最少需要拍多少張照片。
輸入
第1行,兩個整數N和K
第2到K+1行,每行兩個數A和B,表示位置在A和B的兩頭牛不合,因此不能在同一張照片中。
輸出
一個整數,表示約翰最少需要拍多少張照片數。
樣例輸入
7 3
1 3
2 4
5 6
樣例輸出
3
提示
約翰需要拍3張照片。
第一張拍1-2號牛
第二張拍3-5號牛
第三張拍6-7號牛
分析:區間劃分,如 (1,3) (2,4)可從(2,3)處進行劃分
#include<bits/stdc++.h> using namespace std; #define maxn 1005 typedef struct{ int l; int r; }NN; bool cmp(NN a,NN b) { return a.l<b.l; } NN s[maxn]; int main() { int n,k; int a,b; int l,r; int sum=1; cin>>n>>k; for(int i=0;i<k;i++) { cin>>a>>b; s[i].l=min(a,b); s[i].r=max(a,b); } sort(s,s+k,cmp); int x=0; for(int i=x;i<k;i=x) { l=s[i].l; r=s[i].r; for(int j=i+1;j<k;j++) { if(s[j].l>=l&&s[j].l<=r) { l=s[j].l; r=min(r,s[j].r); x=j; } } x++; sum++; } cout<<sum; return 0; }