题目链接
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);
}