• 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;
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    html让同一行的文字和图片居中对齐显示
    mysql 批量插入数据错误
    typescript 安装使用
    vue 使用less或scss
    安装VUE调试工具VUEDEVTOOLS
    MySQL统计NULL字段处理
    java 多态序列化
    Netty使用中出现java.base/java.lang.String cannot be cast to io.netty.buffer.ByteBuf
    java.sql.SQLException: Can't map timezone '' to canonical timezone.
    io.netty.channel.ChannelPipelineException: com.yu.netty_esb.ServerHandler.RecvXmlHandler is not a @Sharable handler, so can't be added or removed multiple times.
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7417176.html
Copyright © 2020-2023  润新知