Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstring>
- #include <map>
- #include <deque>
- #include <queue>
- #include <stack>
- #include <sstream>
- #include <iostream>
- #include <iomanip>
- #include <cstdio>
- #include <cmath>
- #include <cstdlib>
- #include <ctime>
- #include <algorithm>
- #include <vector>
- #include <set>
- #include <complex>
- #include <list>
- #include <climits>
- #include <cctype>
- using namespace std;
- #define pb push_back
- #define all(v) v.begin(),v.end()
- #define rall(v) v.rbegin(),v.rend()
- #define sz size()
- #define rep(i,m) for(int i=0;i<(int)(m);i++)
- #define rep2(i,n,m) for(int i=n;i<(int)(m);i++)
- #define For(it,c) for(__typeof(c.begin()) it=c.begin();it!=c.end();++it)
- #define mem(a,b) memset(a,b,sizeof(a))
- #define mp make_pair
- #define dot(a,b) ((conj(a)*(b)).X)
- #define X real()
- #define Y imag()
- #define length(V) (hypot((V).X,(V).Y))
- #define vect(a,b) ((b)-(a))
- #define cross(a,b) ((conj(a)*(b)).imag())
- #define normalize(v) ((v)/length(v))
- #define rotate(p,about,theta) ((p-about)*exp(point(0,theta))+about)
- #define pointEqu(a,b) (comp(a.X,b.X)==0 && comp(a.Y,b.Y)==0)
- typedef stringstream ss;
- typedef pair<int, int> pii;
- typedef vector<pii> vpii;
- typedef vector<int> vi;
- typedef vector<double> vd;
- typedef vector<vector<int> > vii;
- typedef long long ll;
- typedef long double ld;
- typedef complex<double> point;
- typedef pair<point, point> segment;
- typedef pair<double, point> circle;
- typedef vector<point> polygon;
- const int oo = (int) 1e9;
- const double PI = 2 * acos(0);
- const double eps = 1e-9;
- struct win {
- int ind, x, y, w, h, vs[3], hs[3];
- bool operator <(const win &ww) const {
- return w < ww.w;
- }
- };
- win wins[105];
- int n, q, w, h;
- vii g;
- bool cmp(const win &w1, const win &w2) {
- return w1.ind < w2.ind;
- }
- void dfs(int ind, int w, int h, int x, int y) {
- win &w1 = wins[ind];
- rep(xx,g[ind].sz) {
- int j = g[ind][xx];
- win &w2 = wins[j];
- int hs[3], vs[3];
- hs[0] = w2.x - w1.x;
- hs[1] = w2.w;
- hs[2] = w1.x + w1.w - (w2.x + w2.w);
- vs[0] = w2.y - w1.y;
- vs[1] = w2.h;
- vs[2] = w1.y + w1.h - (w2.y + w2.h);
- int dx = w - w1.w;
- int dy = h - w1.h;
- int ch = w2.hs[0] * hs[0] + w2.hs[1] * hs[1] + w2.hs[2] * hs[2];
- int cv = w2.vs[0] * vs[0] + w2.vs[1] * vs[1] + w2.vs[2] * vs[2];
- rep(i,3) {
- if (w2.hs[i]) {
- ll temp = hs[i] * ((ll) (dx));
- temp /= ch;
- hs[i] += temp;
- }
- if (w2.vs[i]) {
- ll temp = vs[i] * ((ll) (dy));
- temp /= cv;
- vs[i] += temp;
- }
- }
- int ox = w2.x;
- int oy = w2.y;
- w2.x = w1.x + hs[0];
- w2.y = w1.y + vs[0];
- w2.x += x;
- w2.y += y;
- int nx = w2.x;
- int ny = w2.y;
- w2.x = ox;
- w2.y = oy;
- dfs(j, hs[1], vs[1], nx - ox, ny - oy);
- w2.x = nx;
- w2.y = ny;
- }
- w1.w = w;
- w1.h = h;
- }
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("a.txt", "rt", stdin);
- #endif
- int tt = 1;
- while (1) {
- scanf("%d%d%d%d", &n, &q, &w, &h);
- if (!n && !q && !w && !h)
- break;
- rep(i,n) {
- win &ww = wins[i];
- scanf("%d%d%d%d%d%d%d%d%d%d", &ww.x, &ww.y, &ww.w, &ww.h,
- &ww.hs[1], &ww.vs[1], &ww.vs[0], &ww.vs[2], &ww.hs[0],
- &ww.hs[2]);
- ww.ind = i + 1;
- if (ww.vs[0] + ww.vs[1] + ww.vs[2] == 0)
- ww.vs[0] = 1;
- if (ww.hs[0] + ww.hs[1] + ww.hs[2] == 0)
- ww.hs[2] = 1;
- }
- wins[n].x = 0;
- wins[n].y = 0;
- wins[n].w = w;
- wins[n].h = h;
- wins[n++].ind = 0;
- sort(wins, wins + n);
- g.clear();
- g.resize(n);
- rep(i,n) rep2(j,i+1,n)
- if (wins[i].x > wins[j].x && wins[i].y > wins[j].y && wins[i].x
- < wins[j].x + wins[j].w && wins[i].y < wins[j].y
- + wins[j].h) {
- g[wins[j].ind].pb(wins[i].ind);
- break;
- }
- sort(wins, wins + n, cmp);
- rep(i,q) {
- cin >> w >> h;
- dfs(0, w, h, 0, 0);
- printf("Case %d, resize operation %d:\n", tt, i + 1);
- rep2(j,1,n)
- printf(
- " Window %d, x = %d, y = %d, width = %d, height = %d\n",
- j, wins[j].x, wins[j].y, wins[j].w, wins[j].h);
- }
- tt++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement