Advertisement
ahmed_aly

Untitled

Apr 10th, 2011
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.90 KB | None | 0 0
  1. #include <cstring>
  2. #include <map>
  3. #include <deque>
  4. #include <queue>
  5. #include <stack>
  6. #include <sstream>
  7. #include <iostream>
  8. #include <iomanip>
  9. #include <cstdio>
  10. #include <cmath>
  11. #include <cstdlib>
  12. #include <ctime>
  13. #include <algorithm>
  14. #include <vector>
  15. #include <set>
  16. #include <complex>
  17. #include <list>
  18. #include <climits>
  19. #include <cctype>
  20.  
  21. using namespace std;
  22.  
  23. #define pb push_back
  24. #define all(v) v.begin(),v.end()
  25. #define rall(v) v.rbegin(),v.rend()
  26. #define sz size()
  27. #define rep(i,m) for(int i=0;i<(int)(m);i++)
  28. #define rep2(i,n,m) for(int i=n;i<(int)(m);i++)
  29. #define For(it,c) for(__typeof(c.begin()) it=c.begin();it!=c.end();++it)
  30. #define mem(a,b) memset(a,b,sizeof(a))
  31. #define mp make_pair
  32. #define dot(a,b) ((conj(a)*(b)).X)
  33. #define X real()
  34. #define Y imag()
  35. #define length(V) (hypot((V).X,(V).Y))
  36. #define vect(a,b) ((b)-(a))
  37. #define cross(a,b) ((conj(a)*(b)).imag())
  38. #define normalize(v) ((v)/length(v))
  39. #define rotate(p,about,theta) ((p-about)*exp(point(0,theta))+about)
  40. #define pointEqu(a,b) (comp(a.X,b.X)==0 && comp(a.Y,b.Y)==0)
  41.  
  42. typedef stringstream ss;
  43. typedef pair<int, int> pii;
  44. typedef vector<pii> vpii;
  45. typedef vector<int> vi;
  46. typedef vector<double> vd;
  47. typedef vector<vector<int> > vii;
  48. typedef long long ll;
  49. typedef long double ld;
  50. typedef complex<double> point;
  51. typedef pair<point, point> segment;
  52. typedef pair<double, point> circle;
  53. typedef vector<point> polygon;
  54.  
  55. const int oo = (int) 1e9;
  56. const double PI = 2 * acos(0);
  57. const double eps = 1e-9;
  58.  
  59. struct win {
  60.     int ind, x, y, w, h, vs[3], hs[3];
  61.     bool operator <(const win &ww) const {
  62.         return w < ww.w;
  63.     }
  64. };
  65.  
  66. win wins[105];
  67. int n, q, w, h;
  68.  
  69. vii g;
  70.  
  71. bool cmp(const win &w1, const win &w2) {
  72.     return w1.ind < w2.ind;
  73. }
  74.  
  75. void dfs(int ind, int w, int h, int x, int y) {
  76.     win &w1 = wins[ind];
  77.     rep(xx,g[ind].sz) {
  78.         int j = g[ind][xx];
  79.         win &w2 = wins[j];
  80.         int hs[3], vs[3];
  81.         hs[0] = w2.x - w1.x;
  82.         hs[1] = w2.w;
  83.         hs[2] = w1.x + w1.w - (w2.x + w2.w);
  84.         vs[0] = w2.y - w1.y;
  85.         vs[1] = w2.h;
  86.         vs[2] = w1.y + w1.h - (w2.y + w2.h);
  87.         int dx = w - w1.w;
  88.         int dy = h - w1.h;
  89.         int ch = w2.hs[0] * hs[0] + w2.hs[1] * hs[1] + w2.hs[2] * hs[2];
  90.         int cv = w2.vs[0] * vs[0] + w2.vs[1] * vs[1] + w2.vs[2] * vs[2];
  91.         rep(i,3) {
  92.             if (w2.hs[i]) {
  93.                 ll temp = hs[i] * ((ll) (dx));
  94.                 temp /= ch;
  95.                 hs[i] += temp;
  96.             }
  97.             if (w2.vs[i]) {
  98.                 ll temp = vs[i] * ((ll) (dy));
  99.                 temp /= cv;
  100.                 vs[i] += temp;
  101.             }
  102.         }
  103.         int ox = w2.x;
  104.         int oy = w2.y;
  105.         w2.x = w1.x + hs[0];
  106.         w2.y = w1.y + vs[0];
  107.         w2.x += x;
  108.         w2.y += y;
  109.         int nx = w2.x;
  110.         int ny = w2.y;
  111.         w2.x = ox;
  112.         w2.y = oy;
  113.         dfs(j, hs[1], vs[1], nx - ox, ny - oy);
  114.         w2.x = nx;
  115.         w2.y = ny;
  116.     }
  117.     w1.w = w;
  118.     w1.h = h;
  119. }
  120.  
  121. int main() {
  122. #ifndef ONLINE_JUDGE
  123.     freopen("a.txt", "rt", stdin);
  124. #endif
  125.     int tt = 1;
  126.     while (1) {
  127.         scanf("%d%d%d%d", &n, &q, &w, &h);
  128.         if (!n && !q && !w && !h)
  129.             break;
  130.         rep(i,n) {
  131.             win &ww = wins[i];
  132.             scanf("%d%d%d%d%d%d%d%d%d%d", &ww.x, &ww.y, &ww.w, &ww.h,
  133.                     &ww.hs[1], &ww.vs[1], &ww.vs[0], &ww.vs[2], &ww.hs[0],
  134.                     &ww.hs[2]);
  135.             ww.ind = i + 1;
  136.             if (ww.vs[0] + ww.vs[1] + ww.vs[2] == 0)
  137.                 ww.vs[0] = 1;
  138.             if (ww.hs[0] + ww.hs[1] + ww.hs[2] == 0)
  139.                 ww.hs[2] = 1;
  140.         }
  141.         wins[n].x = 0;
  142.         wins[n].y = 0;
  143.         wins[n].w = w;
  144.         wins[n].h = h;
  145.         wins[n++].ind = 0;
  146.         sort(wins, wins + n);
  147.         g.clear();
  148.         g.resize(n);
  149.         rep(i,n) rep2(j,i+1,n)
  150.                 if (wins[i].x > wins[j].x && wins[i].y > wins[j].y && wins[i].x
  151.                         < wins[j].x + wins[j].w && wins[i].y < wins[j].y
  152.                         + wins[j].h) {
  153.                     g[wins[j].ind].pb(wins[i].ind);
  154.                     break;
  155.                 }
  156.         sort(wins, wins + n, cmp);
  157.         rep(i,q) {
  158.             cin >> w >> h;
  159.             dfs(0, w, h, 0, 0);
  160.             printf("Case %d, resize operation %d:\n", tt, i + 1);
  161.             rep2(j,1,n)
  162.                 printf(
  163.                         "    Window %d, x = %d, y = %d, width = %d, height = %d\n",
  164.                         j, wins[j].x, wins[j].y, wins[j].w, wins[j].h);
  165.         }
  166.         tt++;
  167.     }
  168.     return 0;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement