#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T ++k&=3
#define R p=cx+u[k+1&3],q=cy+v[k+1&3]
#define C 0<=p&&p<w&&0<=q&&q<h&&!a[q*w+p]
#define D p=cx+u[k],q=cy+v[k]
#define G cx=p,cy=q,a[q*w+p]=++i
int* buildSnailReverse(int* a, int w, int h)
{
memset(a,0,w*h*4);
int xs=w>h?w-h:0,ys=h>w?h-w:0,p,q,i=1,k=w>=h?0:1,u[]={1,0,-1,0},v[]={0,1,0,-1},xi=1,yi=1;
int cx=w/2,cy=(h-1)/2;
if(w>h)
cx=cy=(h-1)/2,xs++;
if(w<h)
cx=cy=w/2;
a[cy*w+cx]=i;
while(yi++<=ys||xi++<=xs)
D,G;
while(i<h*w){
R;
if(C)
T,G,D;
else{
D;
if(C)
G;
else
T,D;
}
}
return a;
}
void printArray(int *a, int w, int h)
{
for(int y = 0; y<h; y++){
for(int x=0; x<w; x++){
printf("%3d",a[y*w + x]);
}
printf("\n");
}printf("\n");
}
int main()
{
int w, h;
//std::cin >> w >> h;
w = 4, h = 10;
int* a = new int[w * h];
buildSnailReverse(a, w, h);
printArray(a, w, h);
delete[] a;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgojZGVmaW5lIFQgKytrJj0zCiNkZWZpbmUgUiBwPWN4K3VbaysxJjNdLHE9Y3krdltrKzEmM10KI2RlZmluZSBDIDA8PXAmJnA8dyYmMDw9cSYmcTxoJiYhYVtxKncrcF0KI2RlZmluZSBEIHA9Y3grdVtrXSxxPWN5K3Zba10KI2RlZmluZSBHIGN4PXAsY3k9cSxhW3EqdytwXT0rK2kKCmludCogYnVpbGRTbmFpbFJldmVyc2UoaW50KiBhLCBpbnQgdywgaW50IGgpCnsKICAgIG1lbXNldChhLDAsdypoKjQpOwogICAgaW50IHhzPXc+aD93LWg6MCx5cz1oPnc/aC13OjAscCxxLGk9MSxrPXc+PWg/MDoxLHVbXT17MSwwLC0xLDB9LHZbXT17MCwxLDAsLTF9LHhpPTEseWk9MTsKICAgIGludCBjeD13LzIsY3k9KGgtMSkvMjsKICAgIGlmKHc+aCkKCQljeD1jeT0oaC0xKS8yLHhzKys7CglpZih3PGgpCgkJY3g9Y3k9dy8yOwoKCWFbY3kqdytjeF09aTsKCXdoaWxlKHlpKys8PXlzfHx4aSsrPD14cykKCQlELEc7Cgl3aGlsZShpPGgqdyl7CgkJUjsKCQlpZihDKQoJCQlULEcsRDsKCQllbHNlewoJCQlEOwoJCQlpZihDKQoJCQkJRzsKCQkJZWxzZQoJCQkJVCxEOwoJCX0KCX0KCXJldHVybiBhOwp9Cgp2b2lkIHByaW50QXJyYXkoaW50ICphLCBpbnQgdywgaW50IGgpCnsKCWZvcihpbnQgeSA9IDA7IHk8aDsgeSsrKXsKCQlmb3IoaW50IHg9MDsgeDx3OyB4KyspewoJCQlwcmludGYoIiUzZCIsYVt5KncgKyB4XSk7CgkJfQoJCXByaW50ZigiXG4iKTsKCX1wcmludGYoIlxuIik7Cn0KCmludCBtYWluKCkKewoJaW50IHcsIGg7CgkvL3N0ZDo6Y2luID4+IHcgPj4gaDsKICAgIHcgPSA0LCBoID0gMTA7CglpbnQqIGEgPSBuZXcgaW50W3cgKiBoXTsKCWJ1aWxkU25haWxSZXZlcnNlKGEsIHcsIGgpOwoJcHJpbnRBcnJheShhLCB3LCBoKTsKCWRlbGV0ZVtdIGE7CglyZXR1cm4gMDsKfQoK