1 条题解
-
0
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
- 上传者