fork(1) download
  1. #define M(a,b) a<b?a:b
  2. #define N(x) !(x%2)
  3. a,b,c,d,i,j,x,y,**z;
  4. f(x,y){
  5. int n;
  6. z=malloc(x*4);
  7. for(i=x;i--;z[i]=malloc(y*4));
  8. b=(a=M(x/2-(x<y?0:N(x)),y/2-(x<y?0:N(y))))-(x<y?N(x):0);
  9. c=!(d=x<y);
  10. for(i=a,j=b;n++<x*y;){
  11. z[i][j]=n;
  12. // 여기부터
  13. if(c>0&&!d&&x-i-1==j){
  14. c=0;
  15. d=1;
  16. }
  17. else if(!c&&d>0&&x-i-1-(x<y?x%2:y%2)==y-j-1){
  18. c=-1;
  19. d=0;
  20. }
  21. else if(c<0&&!d&&i+(x<y?0:N(y))==y-j-1){
  22. c=0;
  23. d=-1;
  24. }
  25. else if(!c&&d<0&&i-(x<y?N(x):0)==j){
  26. c=1;
  27. d=0;
  28. }
  29. i+=c;
  30. j+=d;
  31. // 여기까지
  32. // i+=(c=????);
  33. // j+=(d=????);
  34. // 로 줄이고 싶음 ㅡㅡ
  35. }
  36. 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));
  37. puts("");
  38. }
  39. main(k){for(k=10;k--;scanf("%d%d",&x,&y),f(x,y));}
Runtime error #stdin #stdout 0s 1924KB
stdin
4 9
4 8
8 4
8 5
8 8
5 8
5 9
9 5
9 4
9 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

32 13 14 15
31 12  1 16
30 11  2 17
29 10  3 18
28  9  4 19
27  8  5 20
26  7  6 21
25 24 23 22

15 16 17 18 19 20 21 22
14  1  2  3  4  5  6 23
13 12 11 10  9  8  7 24
32 31 30 29 28 27 26 25

29 30 31 32 33 34 35 36
28 11 12 13 14 15 16 37
27 10  1  2  3  4 17 38
26  9  8  7  6  5 18 39
25 24 23 22 21 20 19 40

43 44 45 46 47 48 49 50
42 21 22 23 24 25 26 51
41 20  7  8  9 10 27 52
40 19  6  1  2 11 28 53
39 18  5  4  3 12 29 54
38 17 16 15 14 13 30 55
37 36 35 34 33 32 31 56
64 63 62 61 60 59 58 57

29 30 31 32 33
28 11 12 13 34
27 10  1 14 35
26  9  2 15 36
25  8  3 16 37
24  7  4 17 38
23  6  5 18 39
22 21 20 19 40

33 34 35 36 37
32 13 14 15 38
31 12  1 16 39
30 11  2 17 40
29 10  3 18 41
28  9  4 19 42
27  8  5 20 43
26  7  6 21 44
25 24 23 22 45

33 34 35 36 37 38 39 40 41
32 13 14 15 16 17 18 19 42
31 12  1  2  3  4  5 20 43
30 11 10  9  8  7  6 21 44
29 28 27 26 25 24 23 22 45

17 18 19 20 21 22 23 24 25
16  1  2  3  4  5  6  7 26
15 14 13 12 11 10  9  8 27
36 35 34 33 32 31 30 29 28

65 66 67 68 69 70 71 72 73
64 37 38 39 40 41 42 43 74
63 36 17 18 19 20 21 44 75
62 35 16  5  6  7 22 45 76
61 34 15  4  1  8 23 46 77
60 33 14  3  2  9 24 47 78
59 32 13 12 11 10 25 48 79
58 31 30 29 28 27 26 49 80
57 56 55 54 53 52 51 50 81