1 条题解

  • 0
    @ 2024-12-24 9:48:48

    C++ :

    #include <bits/stdc++.h>
    const int maxs=250*250+10;
    using namespace std;
    struct Ans
    {
           int a,d;
           bool operator <(const Ans&b)const
           {
                if (b.d==d) return a<b.a;
                return d<b.d;
           }
    };
    int S[maxs],n,m,point=0,ans_point=0;
    bool vis[maxs*2];
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF){
        Ans ans[10005*3];
        point=0,ans_point=0;
        int i,j,k;
        memset(S,0,sizeof(S));
        memset(vis,0,sizeof(vis));
        for (i=0;i<=m;i++)
        for (j=0;j<=m;j++)
        if (vis[i*i+j*j]==0)
        {
             S[point++]=i*i+j*j;
             vis[i*i+j*j]=1;
        }
        sort(S,S+point);
        for (i=0;i<point;i++)
        for (j=i+1;j<point;j++)
        {
            if (S[i]+(S[j]-S[i])*(n-1)>S[point-1]) continue;
            int last=S[j],d=S[j]-S[i],cnt=2;
            while (vis[last+d] && last+d<=S[point-1] && cnt<n) {cnt++;last=last+d;}
            if (cnt==n)
            {
                ans[ans_point].a=S[i];
                ans[ans_point++].d=d;
            }
        }
        sort(ans,ans+ans_point);
        if (ans_point==0) printf("NONE\n");
        else
        {
             for (i=0;i<ans_point;i++)
             printf("%d %d\n",ans[i].a,ans[i].d);
        }
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    701
    时间
    5000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者