區間相交問題(貪心入門)
阿新 • • 發佈:2019-01-04
區間相交問題
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
310 2015 1020 15
Description
給定 x 軸上 n 個閉區間。去掉儘可能少的閉區間,使剩下的閉區間都不相交。★演算法設計: 對於給定的 n 個閉區間,計算去掉的最少閉區間數。
Input
對於每組輸入資料,輸入資料的第一行是正整數 n (1<=n<=40,000),表示閉區間數。接下來的 n 行中,每行有 2 個整數,分別表示閉區間的 2 個端點。Output
輸出計算出的去掉的最少閉區間數。Sample Input
Sample Output
2這也是貪心的入門題,比較簡單,分析題意,排序很重要,排序不要排錯就ok了。
AC程式碼:
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; struct sgm { int l,r; } a[40010]; bool cmp(sgm A,sgm B) { if(A.r!=B.r) return A.r<B.r; else return A.l>B.l; } int main() { int n,i,j,t; while(~scanf("%d",&n)) { for(i=0; i<n; i++) { scanf("%d%d",&a[i].l,&a[i].r); if(a[i].l>a[i].r) { t=a[i].l; a[i].l=a[i].r; a[i].r=t; } } sort(a,a+n,cmp); //for(i=0;i<n;i++) //printf("%d %d\n",a[i].l,a[i].r); int s=1,x=a[0].r; for(i=1; i<n; i++) { if(x<a[i].l) { x=a[i].r; s++; } } printf("%d\n",n-s); } return 0; }