Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
File: p1.cpp Progetto: alxsoares/OI
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);
}