89分

P1214 [USACO1.4] 等差数列 Arithmetic Progressions

```cpp #include<cstdio> #include<cstring> bool bz[130000]; int f[130000]; int n,m,t=0; bool o=false; int main() { scanf("%d %d",&n,&m); int s=0; for(register int i=0;i<=m;i++) for(register int j=i;j<=m;j++) bz[i*i+j*j]=true; for(register int i=0;i<=m*m*2;i++) if(bz[i]) f[++t]=i; const int r=m*m*2,l=r/(n-1); for(register int j=1;j<=l;j++)//枚举公差 for(register int i=1;i<=t;i++)//枚举起点 { bool p=true; if(f[i]+j*(n-1)>r) break; int d=f[i]; for(register int k=1;k<n;k++) { d=d+j; if(!bz[d]) { p=false; break; } } if(p) { printf("%d %d\n",f[i],j); o=true; } } if(!o) printf("NONE"); } ```
by Mark_ZZY @ 2017-05-26 13:09:06


|