summaryrefslogtreecommitdiff
path: root/1.5/ariprog-alt.c
diff options
context:
space:
mode:
Diffstat (limited to '1.5/ariprog-alt.c')
-rw-r--r--1.5/ariprog-alt.c78
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;
+}
+
+