做的時候只知道把表打出來,不知道怎麼去找等差數列。
做法直接枚舉公差和首項即可。
AC代碼:
/*
ID: 123
PROG: ariprog
LANG: C++
*/
#include <cstdio>
#include <string.h>
const int MAX_NUMBER = 250 * 250 * 2 + 3;
bool vis[MAX_NUMBER];
int n, m;
void init() {
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= m; j++) {
vis[i * i + j * j] = true;
}
}
}
bool isAr(int first, int difference) {
for (int i = 0; i < n; i++) {
if (!vis[first + i * difference]) {
return false;
}
}
return true;
}
int main() {
FILE *in = fopen("ariprog.in", "r");
FILE *out = fopen("ariprog.out", "w");
fscanf(in, "%d%d", &n, &m);
memset(vis, 0, sizeof(vis));
init();
int max_difference = m * m * 2;
int flag = 0;
for (int difference = 1; difference <= max_difference; difference++) {
for (int first = 0; first + (n - 1) * difference <= max_difference; first++) {
if (isAr(first, difference)) {
fprintf(out, "%d %d\n", first, difference);
flag = 1;
}
}
}
if (!flag) {
fprintf(out, "NONE\n");
}
return 0;
}