得分:20
#include
#include
typedef struct _pos{
int s;
int e;
}pos;
int Judge(pos e, pos cur) //判断两条线段是否相交
{
int ret;
if (e.s < cur.s)
{
if (cur.s > e.e)
ret = 0;
else
ret = 1;
}else
{
if (e.s > cur.e)
ret = 0;
else
ret = 1;
}
return ret;
}
void Join(pos *ary, int n)
{
int i, j;
for (i = 0; i < n; i ++)
{
for (j = i+1; j < n; j ++)
{
if (ary[j].s == -1) continue;
if (Judge(ary[i], ary[j]))
{
ary[i].s = (ary[i].s < ary[j].s)?ary[i].s:ary[j].s;
ary[i].e = (ary[i].e > ary[j].e)?ary[i].e:ary[j].e;
ary[j].s = -1;
i --;
break;
}
}
}
}
int main(void)
{
int L, M;
int i, cnt = 0;
pos *Mary;
scanf("%d%d", &L, &M);
Mary = (pos *)malloc(sizeof(pos)*M);
for (i = 0; i < M; i ++)
{
scanf("%d%d", &Mary[i].s, &Mary[i].e);
}
Join(Mary, M);
for (i = 0; i < M; i++)
{
if (Mary[i].s != -1)
{
cnt += Mary[i].e - Mary[i].s + 1;
}
}
cnt = L+1 - cnt;
printf("%d\n", cnt);
free(Mary);
}
测了一下,应该没有什么问题,你再试试