zoukankan      html  css  js  c++  java
  • cogs 1310. [HAOI2006]聪明的猴子

    1310. [HAOI2006]聪明的猴子

    ★   输入文件:monkey.in   输出文件:monkey.out   简单对比
    时间限制:1 s   内存限制:128 MB
    【题目描述】

    在一个热带雨林中生存着一群猴子,它们以树上的果子为生。昨天下了一场大雨,现在雨过天晴,但整个雨林的地表还是被大水淹没着,

    猴子不会游泳,但跳跃能力比较强,它们仍然可以在露出水面的部分植物的树冠上来回穿梭,以找到喜欢吃的果实。

       现在,在这个地区露出水面的有N棵树,假设每棵树本身的直径都很小,可以忽略不计。我们在这块区域上建立直角坐标系,则每一棵树的位置由其所对应的坐标表示(任意两棵树的坐标都不相同)。

       在这个地区住着的猴子有M个,下雨时,它们都躲到了茂密高大的树冠中,没有被大水冲走。由于各个猴子的年龄不同、身体素质不同,它们跳跃的能力不同。有的猴子跳跃的距离比较远(当然也可以跳到较近的树上),而有些猴子跳跃的距离就比较近。这些猴子非常聪明,它们通过目测就可以准确地判断出自己能否跳到对面的树上。

       任务:现已知猴子的数量及每一个猴子的最大跳跃的距离,还知道露出水面的每一棵树的坐标,你的任务是统计有多少猴子可以在这个地区露出水面的所有树冠上觅食。

     

    【输入格式】

     

    第一行一个整数,表示猴子的个数 M(2<=M<=500)

    第二行为M个整数,依次表示猴子的最大跳跃距离(每个整数值在1---1000之间)

    第三行为一个整数,表示树的总棵树N(2<=N<=1000)

    第四行至第N+3行为N棵树的坐标(横纵坐标均为整数,范围为:-1000--1000)

     

    【输出格式】

    输出只有一行,包括一个整数,表示可以有这个地区的所有树冠上觅食的猴子数。

    【样例输入】

    4 1 2 3 4 6 0 0 1 0 1 2 -1 -1 -2 0 2 2

    【样例输出】

    3

    【提示】

     

    对于40%的数据,保证有2<=N<=100,1<=M<=100

    对于100%的数据,保证有2<=N<=1000,1<=M<=500

    思路:最小生成树。

    #include<cmath>
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int monky[501];
    struct q{
        int x,y,t;
    }tree[1001];
    int m,n,num,f[1001];
    struct p{
        int from;
        int to;
        double dis;
    }c[1000001];
    int cmp(p a1,p a2){
        return a1.dis<a2.dis;
    }
    int find(int x){
        if(f[x]!=x) f[x]=find(f[x]);
        return f[x];
    }
    int main(){
        freopen("monkey.in","r",stdin);
        freopen("monkey.out","w",stdout);
        cin>>m;
        for(int i=1;i<=m;i++)
            cin>>monky[i];
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>tree[i].x>>tree[i].y;
            tree[i].t=i;
        }
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++){    
                c[++num].from=tree[i].t;
                c[num].to=tree[j].t;
                c[num].dis=sqrt(pow(tree[i].x-tree[j].x,2)+pow(tree[i].y-tree[j].y,2));
            }
        stable_sort(c+1,c+1+num,cmp);
        stable_sort(monky+1,monky+1+m);
        int u,l=0;
        for(int i=1;i<=n;i++)    f[i]=i;
        for(int i=1;i<=num;i++){
            if(l==n-1) break;
            if(find(c[i].from)!=find(c[i].to)){
                f[find(c[i].from)]=find(c[i].to);
                l++;
                u=c[i].dis;
            }
        }
        int tot=0;
        for(int i=1;i<=m;i++)
            if(monky[i]>=u)
                tot++;
        cout<<tot;
        return 0;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    高德引擎构建及持续集成技术演进之路
    Java的传值调用
    Java中真的只有值传递么?
    Centos7启动防火墙时报错Failed to start IPv4 firewall with iptables
    Redis入门(四)-Java操作Redis
    SecureCRT远程连接The remote system refused the connection问题
    [需求设计]从一个小需求感受Redis的独特魅力
    Oracle报错ORA-12516 TNS:listener could not find available handler with matching protocol stack
    编译Netty源码遇到的一些问题-缺少io.netty.util.collection包
    Linux使用alias自定义命令自定义快捷键
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7417176.html
Copyright © 2011-2022 走看看