1 条题解

  • 0
    @ 2025-8-24 22:27:16

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar phigy
    互关,私信。 What is mind?No matter.What is matter?Never mind.

    搬运于2025-08-24 22:27:16,当前版本为作者最后更新于2020-11-26 16:51:16,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    显然可以顺着枚举一遍。

    预计得分10分。

    #include "triangulation.h"
    #include <iostream>
    
    using namespace std;
    
    int solve(int n)
    {
        cin>>n;
        int i,j,k;
        for(i=2;i<=n;i++)
        {
            for(j=1;j<=i-1;j++)
            {
                if(query(j,n-i+j)==1)
                {
                    return j*n+n-i+j;
                }
            }
        }
    }
    

    画图分析会发现:

    一定有线段ABAB除非点AABB中有点与00有线段或ABAB距离为1。

    显然ABAB上方的线段到00的距离一定大于ABAB00的距离。

    因此只需将22(n1)(n-1)是否与00有线问一遍即可。

    最后记得特判。

    代码:

    #include "triangulation.h"
    #include <iostream>
    
    using namespace std;
    
    int d(int a,int b)
    {
        if(a!=0)
        {
            return max(a,n-b);
        }
        else 
        {
            return max(b,n-b);
        }
    }
    int query(int a,int b)
    {
        int x;
        cin>>x;
        return x;
    }
    int solve(int n)
    {
        cin>>n;
        int i;
        int dis=9999999,ans=0;
        int l=1;
        for(i=2;i<=n-1;i++)
        {
            if(query(i,0)==1)
            {
                if(d(i,0)<dis)
                {
                    dis=d(i,0);
                    ans=i;
                }
                if(i-l>1&&d(l,i)<dis)
                {
                    dis=d(l,i);
                    ans=n*l+i;
                }
                l=i;
            }
        }
        int i=n-1;
        if(l+1!=i&&d(l,n-1)<ans)
        {
    	dis=d(l,n-1);
    	ans=n*l+n-1;
        }
        return ans;
    }
    
    • 1

    信息

    ID
    6265
    时间
    1000ms
    内存
    500MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者