diff options
Diffstat (limited to '1.5/ariprog-alt.c')
-rw-r--r-- | 1.5/ariprog-alt.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/1.5/ariprog-alt.c b/1.5/ariprog-alt.c new file mode 100644 index 0000000..68e437e --- /dev/null +++ b/1.5/ariprog-alt.c @@ -0,0 +1,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; +} + + |