1 条题解

  • 0
    @ 2025-8-24 21:43:16

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar HiJ1m
    **

    搬运于2025-08-24 21:43:16,当前版本为作者最后更新于2017-10-08 08:09:39,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这个题数据范围N<=1050 , O(N²)的BFS,每次逐个计算两个齿轮的距离 ,实现过程很容易。

    具体细节见代码注释。

    P.S. 齿轮转的方向和结果好像没什么关系,于是我算的时候就没取相反数。

    //Bzoj1615 麻烦的干草打包机
    #include<bits/stdc++.h>
    #define MAXN 1084
    struct cycle{
        int x,y,r;
    }a[MAXN];
    using namespace std;
    int N,xt,yt,st,ed,p[MAXN];
    double s[MAXN],ans;
    bool vis[MAXN];
    void BFS()
    {
        queue<int>q;    
        vis[st]=1,s[st]=10000;                    //初值
        q.push(st);
        while(!q.empty())
        {
            int tmp=q.front();q.pop();
            for(int i=1;i<=N;i++)
            {
                if(vis[i])continue;
                if((a[tmp].x-a[i].x)*(a[tmp].x-a[i].x)+(a[tmp].y-a[i].y)*(a[tmp].y-a[i].y)==(a[i].r+a[tmp].r)*(a[i].r+a[tmp].r))
                {                                 //上面这行是判断  距离的平方 是否等于 两齿轮半径和的平方         
                    vis[i]=1;
                    double t=a[tmp].r*1.0/a[i].r;                //计算
                    s[i]=s[tmp]*t; 
                    p[i]=tmp;                                                         //这里说一下这个p数组是记路径用的,方便加和。
                    if(i==ed)return ;                                              //跳出
                    q.push(i);
                } 
            }
        }
    }
    int main()
    {
        scanf("%d%d%d",&N,&xt,&yt);
        for(int i=1;i<=N;i++){
            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].r);
            if(a[i].x==0&&a[i].y==0)st=i;
            if(a[i].x==xt&&a[i].y==yt)ed=i;    //存一下开始和结尾的位置
        }
        BFS();
        for(int i=ed;i;i=p[i])
            ans+=s[i];
        printf("%d",(int)ans);                               //这个地方要取整,四舍五入会WA30
        return 0;
    } 
    博客链接http://www.cnblogs.com/Elfish/p/7634159.html
    
    • 1

    信息

    ID
    1968
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者