码迷,mamicode.com
首页 > 其他好文 > 详细

2620 战壕

时间:2016-06-03 21:32:33      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

2620 战壕

 

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description

Smart和Sarah正在玩一个即时战略游戏。

Smart在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限,但是,战壕有一个弱点:就是只能攻击它的左下方,说白了就是横、纵坐标都不大于它的点。这样,Sarah就可以从别的地方进攻摧毁战壕,从而消灭Smart的部队。

战壕都有一个保护范围,同它的攻击范围一样,它可以保护处在它左下方的战壕。所有处于它保护范围的战壕都叫做它的保护对象。这样,Sarah就必须找到Smart的战壕中保护对象最多的战壕,从而优先消灭它。

现在,由于Sarah没有时间来计算,所以拜托你来完成这个任务:给出这n个战壕的坐标(xi、yi),要你求出保护对象个数为0,1,2……n-1的战壕的个数。

输入描述 Input Description

第一行,一个正整数n(1≤n≤5000)

接下来n行,每行两个数xi,yi,代表第i个点的坐标(1≤xi,yi≤32767)注意:可能包含多重战壕的情况(即有数个点在同一坐标)。

输出描述 Output Description

输出n行,分别代表保护对象有0,1,2……n-1个的战壕个数。

样例输入 Sample Input

5

1 1

5 1

7 1

3 3

5 5

样例输出 Sample Output

1

2

1

1

0

数据范围及提示 Data Size & Hint

时间限制

1s

分类标签 Tags 

/*
暴力不解释,看代码;线段树什么,88~~
*/
#include<cstdio>
#include<iostream>
using namespace std;
struct node{
    int x,y;
}a[5010];
int f[5010],ans[5010],n;;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&a[i].x,&a[i].y);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(i!=j&&a[i].x>=a[j].x&&a[i].y>=a[j].y)
                f[i]++;
    for(int i=1;i<=n;i++)
        ans[f[i]]++;
    for(int i=0;i<n;i++)
        printf("%d\n",ans[i]);
    return 0;
}

 

 

2620 战壕

标签:

原文地址:http://www.cnblogs.com/shenben/p/5557473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!