fork(3) download
  1. #define logd(x) printf(#x": %d\n", x)
  2. #define M(a,b) a<b?a:b
  3. #define N(x) !(x%2)
  4. a,b,c,d,e,i,j,x,y,**z;
  5. p(){for(j=y;j--;)for(i=x;i--;printf("%*d%c",(int)log10(x*y)+1,z[x-i-1][y-j-1],i?32:10));}
  6. f(){
  7. if(c>0&&!d&&x-i-1==j){
  8. c=0;
  9. d=1;
  10. }
  11. else if(!c&&d>0&&x-i-1-(x<y?x%2:y%2)==y-j-1){
  12. c=-1;
  13. d=0;
  14. }
  15. else if(c<0&&!d&&i+(x<y?0:N(y))==y-j-1){
  16. c=0;
  17. d=-1;
  18. }
  19. else if(!c&&d<0&&i-(x<y?N(x):0)==j){
  20. c=1;
  21. d=0;
  22. }
  23. i+=c;
  24. j+=d;
  25. }
  26. main(){
  27. scanf("%d%d",&x,&y);
  28. z=malloc(x*4);
  29. for(i=x;i--;z[i]=malloc(y*4));
  30.  
  31. //a=x/2-(x<y?0:N(x));
  32. //b=y/2-(x<y?0:N(y));
  33. //a=a<b?a:b;
  34. //b=(a<b?a:b)-(x<y?N(x):0);
  35. b=(a=M(x/2-(x<y?0:N(x)),y/2-(x<y?0:N(y))))-(x<y?N(x):0);
  36. c=!(d=x<y);
  37.  
  38. for(i=a,j=b;e++<x*y;z[i][j]=e,f());
  39.  
  40. p();
  41. }
Success #stdin #stdout 0s 1924KB
stdin
4 9
stdout
36 15 16 17
35 14  1 18
34 13  2 19
33 12  3 20
32 11  4 21
31 10  5 22
30  9  6 23
29  8  7 24
28 27 26 25