summaryrefslogtreecommitdiff
path: root/1.5/ariprog-alt.c
blob: 68e437eaab8d71b005071371cac8840efd4c01f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
ID: mytbk921
LANG: C
TASK: ariprog
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int cmp(const void* a, const void* b)
{
    return *(int*)a - *(int*)b;
}

int main()
{
    FILE *fin, *fout;
    int n,m,setSize,i,j,diff,step,maxdiff,count=0;
    int myset[251*251];
    
    fin = fopen("ariprog.in", "r");
    fout = fopen("ariprog.out", "w");
    
    fscanf(fin, "%d%d", &n, &m);
    fclose(fin);
    
    setSize = 0;
    for (i=0; i<=m; i++){
        myset[i] = i*i;
    }
    setSize = m+1;
    for (i=1; i<=m; i++){
        for (j=i; j<=m; j++){
            myset[setSize] = myset[i]+myset[j];
            setSize++;
        }
    }
    qsort(myset, setSize, sizeof(myset[0]), cmp);
    maxdiff = myset[setSize-1]/(n-1);

    if (n>=6){
        step = 12;
    }else if (n>=4){
        step = 4;
    }else{
        step = 1;
    }
    
    for (diff=step; diff<=maxdiff; diff+=step){
        for (i=0; i<setSize; i++){
            if (i>0 && myset[i]==myset[i-1]){
                continue;
            }
            int curr = myset[i];
            for (j=1; j<n; j++){
                curr += diff;
                if (bsearch(&curr, myset, setSize, sizeof(myset[0]), cmp)==NULL){
                    break;
                }
            }
            if (j<n){
                continue;
            }else{
                count++;
                fprintf(fout, "%d %d\n", myset[i], diff);
            }
        }
    }
    if (count==0){
        fprintf(fout, "NONE\n");
    }
    
    fclose(fout);
    return 0;
}