• hdoj1556-Color the ball


    Problem Description

    N个气球排成一排,从左到右依次编号为1,2,3….N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽”牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗?

    Input

    每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N)。
    当N = 0,输入结束。

    Output

    每个测试实例输出一行,包括N个整数,第I个数代表第I个气球总共被涂色的次数。

    Sample Input

    3
    1 1
    2 2
    3 3
    3
    1 1
    1 2
    1 3
    0

    Sample Output

    1 1 1
    3 2 1

    思路

     这题的解法可谓奇妙,首先我们用一个数组data来记录信息,比如数据是a到b气球涂色时,我们给data[a]加一,然后data[b+1]减一,然后当我们输出结果时,声明一个变量temp=0,然后在每次输出第i个气球的结果前都加上data[i],然后temp的值即为结果;

    code

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <fstream>
    using namespace std;
    
    const int MAX = 100000+5;
    int data[MAX];
    
    int main()
    {
            int n;
            //freopen("data.in", "r", stdin);
            while(scanf("%d", &n) && n != 0)
            {
                    memset(data, 0, sizeof(data));
                    for(int i = 0; i < n; ++ i)
                    {
                            int a, b;
                            scanf("%d%d", &a, &b);
                            data[a] ++;
                            data[b+1] --;
                    }
                    int temp = 0;
                    for(int i = 1; i <= n; ++ i)
                    {
                            temp += data[i];
                            if(i > 1)
                            {
                                    printf(" ");
                            }
                            printf("%d", temp);
                    }
                    printf("
    ");
            }
            return 0;
    }
    
  • 相关阅读:
    Linux中find常见用法示例
    PHP写的异步高并发服务器,基于libevent
    Prototype原型模式
    抽象工厂模式
    工厂方法模式
    简单工厂模式
    记一次皮肤过敏
    Thread类线程结束会唤醒使用其对象做锁而睡眠的线程
    位运算符
    逻辑运算符
  • 原文地址:https://www.cnblogs.com/topk/p/6580082.html
Copyright © 2020-2023  润新知