【USACO 1.4】Arithmetic Progressions
/* TASK: ariprog LANG:C++ URL:http://train.usaco.org/usacoprob2?a=PA9lOcZrdWq&S=ariprog SOLVE:平方和最大为m*m*2,因此bq数组标记数i是否为平方和数,num数组存第i个平方和数 枚举公差q,从1到num[tol]/(n-1),枚举起点p,从num[1]到num[tol-1] 判断数p+i*q是否为平方和数 */ #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #define ll long long using namespace std; bool bq[200000]; int n,m,tol,found; int p,q; int num[200000]; int main() { freopen("ariprog.in","r",stdin); freopen("ariprog.out","w",stdout); scanf("%d%d",&n,&m); int cnt=0; for(int i=0;i<=m;i++) for(int j=i;j<=m;j++) bq[i*i+j*j]=1; for(int i=0;i<=m*m*2;i++) if(bq[i])num[++tol]=i; //printf("%d %d\n",tol,num[tol]); int up=num[tol]/(n-1); // printf("%d\n",up); for(q=1;q<=up;q++){ for(int i=1;i<tol;i++){ p=num[i]; int ok=1; for(int j=1;j<n&&ok;j++) if(bq[p+j*q]==0)ok=0; if(ok){ printf("%d %d\n",p,q); found=1; } } } if(!found)puts("NONE"); return 0; }
┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆