- 84 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 22:12:11.69 ]
- >>83
// 実行時間 13秒 これ以上早くする方法は分からない #include <stdio.h> #define NITEM(arr) (sizeof(arr)/sizeof(arr[0])) typedef struct{ int element_num; int element[4]; }answer_t; int cubic[200]; answer_t answer[5000000]; // 571 を計算できるサイズ void update(int from, int to, int new_elm){ if(to<0 || NITEM(answer)<=to) return; if(answer[to].element_num>=0) return; answer[to]=answer[from]; answer[to].element[answer[to].element_num++]=new_elm; } int main(void){ int i, j, k; for(i=0;i<NITEM(cubic);i++) cubic[i]=i*i*i; for(i=1;i<NITEM(answer);i++) answer[i].element_num=-1; for(i=0;i<4;i++){ for(j=0;j<NITEM(answer);j++){ if(answer[j].element_num!=i) continue; for(k=0;k<NITEM(cubic);k++){ update(j, j+cubic[k], k); update(j, j-cubic[k], -k); } } } for(i=1;i<=1000;i++) printf("%4d : %.0d %.0d %.0d %.0d\n", i, answer[i].element[0], answer[i].element[1], answer[i].element[2], answer[i].element[3]); return 0; }
|

|