int main() { int N,M,A,B; scanf("%d%d%d%d",&M,&N,&B,&A); int a=N%A,b=M%B; int res=(N/A)*(M/B); if (a){ res+=ceilDiv(M/B,A/a); } if (b){ res+=ceilDiv(N/A,B/b); } if (a && b){ if ((M/B)%(A/a)==0 && (N/A)%(B/b)==0){ ++res; } } printf("%d\n",res); return 0; }
uchar* saveto2D(const Space3D<Vec4b>& data, int n, int depth, int inArow, Vec2i* sz2d) { int dmin = 260, dmax = -1; int iwidth = n * inArow; int iheight = (ceilDiv(depth, inArow)) * n; // should be up-div uchar *ni = new uchar[iwidth * iheight*4]; int rowX = 0, rowY = 0, rowCount = 0; int nn = n*n; for(int z = 0; z < depth; ++z) { for(int y = 0; y < n; ++y) { for(int x = 0; x < n; ++x) { int di = (x + rowX + (y + rowY)*iwidth)*4; uchar d = data.axx(x, y, z).v[0]; //[(x + y*n + z*nn) * 4]; // take just the first uchar d2 = data.axxRepeat(z+12, y+12, x+12).v[0]; ni[di] = d; ni[di+1] = d2; // ni[di+2] = d; ni[di+2] = 0xff; ni[di+3] = 0xff; if (d < dmin) dmin = d; if (d > dmax) dmax = d; } } rowX += n; ++rowCount; if (rowCount >= inArow) { rowX = 0; rowY += n; rowCount = 0; } } printf("%d - %d = %d\n", dmax, dmin, dmax - dmin); *sz2d = Vec2i(iwidth, iheight); return ni; }
void Solve::solve(FILE *fin, FILE *fout) { int cnt = 1; for(int i = 0; i <= 10; i ++, cnt *= 2) lb[cnt] = i; fscanf(fin, "%d%d", &n, &m); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) fscanf(fin, "%d", &object[i][j].a); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) fscanf(fin, "%d", &object[i][j].d); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) fscanf(fin, "%d", &object[i][j].hp); fscanf(fin, "%d%d%d", &llx.a, &llx.d, &llx.hp); fscanf(fin, "%d", &nBaby); for(int i = 1; i <= nBaby; i ++) fscanf(fin, "%d%d%d", &baby[i].a, &baby[i].d, &baby[i].hp); for(int i = 1; i <= n; i ++) for(int j = 1; j <= m; j ++) { Stuff &lyd = object[i][j]; if(llx.a <= lyd.d) w[i][j][0] = INFINITY; else { int t1 = ceilDiv(lyd.hp, llx.a-lyd.d); int tmp = (t1 - 1) * MAX(0, lyd.a - llx.d); if(tmp >= llx.hp) w[i][j][0] = INFINITY; else w[i][j][0] = tmp; } for(int k = 1; k <= nBaby; k ++) { Stuff &bb = baby[k]; if(bb.a <= lyd.d) w[i][j][k] = INFINITY; else { int t1 = ceilDiv(lyd.hp, bb.a - lyd.d); int tmp = (t1 - 1) * MAX(0, lyd.a - bb.d); if(tmp >= bb.hp) { int t2 = ceilDiv(bb.hp, lyd.a - bb.d); tmp = t2 * MAX(0, bb.a - lyd.d); //baby died if(llx.a <= lyd.d) w[i][j][k] = INFINITY; else { int t1 = ceilDiv(lyd.hp - tmp, llx.a-lyd.d); tmp = (t1 - 1) * MAX(0, lyd.a - llx.d); if(tmp >= llx.hp) w[i][j][k] = INFINITY; else w[i][j][k] = tmp; } } else w[i][j][k] = 0; } } } upperlim = (1 << nBaby) - 1; work(fin, fout); }