POJ 2665 Trees(我的水题之路——移树,POJ100题啦!)

Trees
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 8212 Accepted: 5461

Description

The road off the east gate of Peking University used to be decorated with a lot of trees. However, because of the construction of a subway, a lot of them are cut down or moved away. Now please help to count how many trees are left. 

Let's only consider one side of the road. Assume that trees were planted every 1m (meter) from the beginning of the road. Now some sections of the road are assigned for subway station, crossover or other buildings, so trees in those sections will be moved away or cut down. Your job is to give the number of trees left. 

For example, the road is 300m long and trees are planted every 1m from the beginning of the road (0m). That's to say that there used to be 301 trees on the road. Now the section from 100m to 200m is assigned for subway station, so 101 trees need to be moved away and only 200 trees are left.

Input

There are several test cases in the input. Each case starts with an integer L (1 <= L < 2000000000) representing the length of the road and M (1 <= M <= 5000) representing the number of sections that are assigned for other use. 

The following M lines each describes a section. A line is in such format: 

Start End 

Here Start and End (0 <= Start <= End <= L) are both non-negative integers representing the start point and the end point of the section. It is confirmed that these sections do not overlap with each other. 

A case with L = 0 and M = 0 ends the input.

Output

Output the number of trees left in one line for each test case.

Sample Input

300 1
100 200
500 2
100 200
201 300
0 0

Sample Output

200
300

Source


一个L(L<2 * 10^9)长度的公路,上面每隔一米有一棵树,即这个公路上有L+1棵树。之后有M个区间的树要移除,区间为[start,end],所以每次会移除end-start+1棵树。问最后还剩下多少棵树。

用一个unsigned int储存总数,然后每次对于区间减去需要移除的数量,最后求值。

注意点:
1)unsigned int为32位,最大值为4294967296,可以存储的下。

代码(1AC, POJ100题啦 \(^o^)/):
#include <cstdio>
#include <cstdlib>
#include <cstring>

int main(void){
    unsigned int trees;
    int i, j;
    int M;
    unsigned int start, end;

    while (scanf("%u%d", &trees, &M), trees != 0 || M != 0){
        trees += 1;
        for (i = 0; i < M ; i++){
            scanf("%u%u", &start, &end);
            trees -= end - start + 1;
        }
        printf("%u\n", trees);
    }
    return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值