题目链接
http://codeforces.com/gym/100803/attachments
这道题的思路就是先按照第一个排序,把有重合的区间合并就好了
AC代码
#include<stdio.h> #include<algorithm> #include<iostream> #include<cstring> using namespace std; #define inf 999999 struct node{ int x,y; }p1[1010],p2[1010]; bool cmp(node a,node b) { return a.x<b.x; } int main() { int m,n; int sum=0; int tot; int maxn,minn; memset(p1,0,sizeof(p1)); memset(p2,0,sizeof(p2)); scanf("%d%d",&m,&n); for(int i=1;i<=n;i++) scanf("%d%d",&p1[i].x,&p1[i].y); sort(p1+1,p1+n+1,cmp); tot=0; for(int i=1;i<=n;i++) { if(p1[i].x<=p2[tot].y) p2[tot].y=max(p1[i].y,p2[tot].y); else{ tot++; p2[tot].x=p1[i].x; p2[tot].y=p1[i].y; } } sum=m+1; for(int i=1;i<=tot;i++) sum+=(p2[i].y-p2[i].x)*2; printf("%d\n",sum); }