用vis数组预处理双平方数集合, 方便判断.
PII数组容易用来排序.
算法: 枚举.
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N = 62500 * 2; // 注意数组大小
bool vis[N];
vector<PII> ans;
int n, m;
int main()
{
freopen("input.in","r",stdin);
freopen("input.out","w",stdout);
scanf("%d%d", &n, &m);
for(int i = 0; i <= m; i++)
for(int j = 0; j <= m; j++)
vis[i * i + j * j] = true;
for(int i = 0; i <= m * m + m * m; i++) // 枚举起点
{
for(int j = 1; j <= (m * m + m * m - i) / (n - 1); j++) // 枚举公差 st + (n - 1)j <= m * m + m * m
{
bool flag = true;
for(int k = 0; k < n; k++)
{
if(i + k * j > m * m + m * m || !vis[i + k * j])
{
flag = false;
break;
}
}
if(flag) ans.push_back({j, i});
}
}
if(ans.empty()) cout << "NONE";
else
{
sort(ans.begin(), ans.end());
for(auto item : ans) cout << item.second << ' ' << item.first << endl;
}
return 0;
}