#include typedef long long I; typedef double D; #define DO(n,stm) {I i=0,_n=(n); for(;i<_n;i++){stm}} #define DECL_ARR(t, v, l) t *v = malloc(sizeof(t)*(l)) void filter11(I,D*,D,D); void filter21(I,D*,D,D,D); void filter32(I,D*,D,D,D,D,D); void filter(I length, D* a, I lx, D* xc, I ly, D* yc) { if (lx==1 && ly==1) { return filter11(length,a,xc[0],yc[0]); } if (lx==2 && ly==1) { return filter21(length,a,xc[0],xc[1],yc[0]); } if (lx==3 && ly==2) { return filter32(length,a,xc[0],xc[1],xc[2],yc[0],yc[1]); } DECL_ARR(D, x, lx); DECL_ARR(D, y, ly); DO(lx, x[i]=0;); DO(ly, y[i]=0;); int j, ix=0, iy=0; for (j=0; j