AcWing 1354. 等差数列
原题链接
中等
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 250*250*2+10;
int n,m;
bool st[N];
struct shu{
int head;
int div;
}shul[10000];
bool cmp(shu &a , shu &b)
{
if(a.div != b.div) return a.div<b.div;
else return a.head<b.head;
}
int main()
{
cin>>n>>m;
for (int i = 0; i <= m; ++i)
for (int j = i; j <= m; ++j)
st[i * i + j * j] = true;
int s = 2*m*m,cnt=0;
for(int i=0;i<=s;++i)
{
if(st[i])
{
for(int j=i+1;j<=s;++j)
{
if(st[j])
{
int d = j-i,last = i+d*(n-1);
if(last>s) break;
bool flag = true;
for(int k=j+d;k<=last;k+=d)
{
if(!st[k])
{
flag = false;
break;
}
}
if(flag) shul[cnt++] = {i,d};
}
}
}
}
if(cnt==0) puts("NONE");
else
{
sort(shul,shul+cnt,cmp);
for(int i=0;i<cnt;i++)
{
cout<<shul[i].head<<' '<<shul[i].div<<endl;
}
}
return 0;
}