一. 原题
An arithmetic progression is a sequence of the form a, a+b, a+2b, ..., a+nb where n=0,1,2,3,... . For this problem, a is a non-negative integer and b is a positive integer.
Write a program that finds all arithmetic progressions of length n in the set S of bisquares. The set of bisquares is defined as the set of all integers of the form p2 + q2 (where p and q are non-negative integers).
TIME LIMIT: 5 secs
PROGRAM NAME: ariprog
INPUT FORMAT
Line 1: | N (3 <= N <= 25), the length of progressions for which to search |
Line 2: | M (1 <= M <= 250), an upper bound to limit the search to the bisquares with 0 <= p,q <= M. |
SAMPLE INPUT (file ariprog.in)
5 7
OUTPUT FORMAT
If no sequence is found, a single line reading `NONE'. Otherwise, output one or more lines, each with two integers: the first element in a found sequence and the difference between consecutive elements in the same sequence. The lines should be ordered with smallest-difference sequences first and smallest starting number within those sequences first.
There will be no more than 10,000 sequences.
SAMPLE OUTPUT (file ariprog.out)
1 4 37 4 2 8 29 8 1 12 5 12 13 12 17 12 5 20 2 24
二. 分析
三. 代码
USER: Qi Shen [maxkibb3] TASK: ariprog LANG: C++ Compiling... Compile: OK Executing... Test 1: TEST OK [0.000 secs, 4304 KB] Test 2: TEST OK [0.000 secs, 4304 KB] Test 3: TEST OK [0.000 secs, 4304 KB] Test 4: TEST OK [0.000 secs, 4304 KB] Test 5: TEST OK [0.011 secs, 4304 KB] Test 6: TEST OK [0.097 secs, 4304 KB] Test 7: TEST OK [1.264 secs, 4304 KB] Test 8: TEST OK [2.916 secs, 4304 KB] Test 9: TEST OK [2.549 secs, 4304 KB] All tests OK.
Your program ('ariprog') produced all correct answers! This is your submission #4 for this problem. Congratulations!
Here are the test data inputs:
------- test 1 [length 4 bytes] ---- 3 2 ------- test 2 [length 4 bytes] ---- 5 7 ------- test 3 [length 6 bytes] ---- 14 10 ------- test 4 [length 6 bytes] ---- 10 13 ------- test 5 [length 6 bytes] ---- 12 50 ------- test 6 [length 7 bytes] ---- 18 100 ------- test 7 [length 7 bytes] ---- 21 200 ------- test 8 [length 7 bytes] ---- 22 250 ------- test 9 [length 7 bytes] ---- 25 250Keep up the good work!
/*
ID:maxkibb3
LANG:C++
PROG:ariprog
*/
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
int n, m;
vector<int> square_num;
bool is_sum[130000];
void make_square() {
for(int i = 0; i <= m; i++) {
square_num.push_back(i * i);
}
int ssize = square_num.size();
for(int i = 0; i < ssize; i++) {
for(int j = 0; j < ssize; j++) {
is_sum[square_num[i] + square_num[j]] = true;
}
}
}
int main() {
freopen("ariprog.in", "r", stdin);
freopen("ariprog.out", "w", stdout);
bool has_ans = false;
scanf("%d%d", &n, &m);
make_square();
int up = 2*m*m / (n - 1);
for(int i = 1; i <= up; i++) {
for(int j = 0; j <= 2*m*m - i*(n-1); j++) {
bool flag = true;
int num = j - i;
for(int k = 0; k < n; k++) {
num = num + i;
if(!is_sum[num]) {
flag = false;
break;
}
}
if(flag) {
has_ans = true;
printf("%d %d\n", j, i);
}
}
}
if(!has_ans) {
printf("NONE\n");
}
return 0;
}