游客 Signup | Login
中文 | En

2636 - 白云校区的树

在白云校区门口到大马路总共有一条长L米的小路,小路旁边有一排树,两棵相邻树之间的间隔都是2米,可以把马路看成一条直线,白云校区门口看成0点,大马路口在L位置,则在直线上0, 2, 4, 6, 8, 10, … 上都种了一棵树, 如果L是偶数,则在L处也有棵树, 否则没有树。

 

现在马路上需要用一些区域来修建公交车站,这些区域用它们在直线上的起始点与终止点表示,已知任一区域的起始点和终止点的坐标都是整数,公交站区域之间可能有重合的部分,现在要把这些区域中的树(包括区域端点处的两棵树,如果有树的话)移走。请你计算将这些树移走后马路上还剩下多少棵树。


<span style="color:#E53333;">(大家注意落在重复的区域的树不要重复计数,这道题很简单,千万不要想复杂,注意边界值,下面增加2组测试数据</span><span style="color:#E53333;">)</span> 

Input

有多组测试数据(小于1000组),每组测试数组的第一行有两个整数L(1≤L≤10 000)和M(1≤M≤100), L表示马路的长度,M表示区域的个数。接下来M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起点与终点的坐标。

Output

每组数据的输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。


Examples

Input

500 3
150 300
100 200
470 471
1000 3
150 400
100 300
470 571
9021 7
2678 5641
1497 3088
8369 8436
3105 5119
2759 5024
5449 6408
4754 4843
100 2
0 100
50 60

Output

149
299
2021
0

Solution C++

#include<iostream>
#include <algorithm>
using namespace std;

const int NN = 10001;




void Process(bool trees[], int start, int end)
{
    for (int i=start; i<=end; i++)
        trees[i] = false;
}




int main()
{
    int L, M, i;
    bool trees[NN];

    int start, end;
    while(cin>>L >>M)
    {
        for (i=0; i <= L; i++)
        {
            if (i%2 == 0)
                trees[i] = true;
            else
                trees[i] = false;
        }
        
        for (i=0; i<M; i++)
        {
            cin>>start >>end;

            Process(trees, start, end);
           
        }
        cout<<count(trees, trees+L+1, true)<<endl;
    }
    return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题