Problem 1165 : Pablo Squarson's Headache

Problem A: 角角画伯,かく悩みき
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=1165&lang=jp

  • 問題概要

パネルの置きかたが相対的に与えられる。
そのできた図形をそのままの向きで長方形の収める場合の一番ちいさな長方形の
縦と横の長さを求めよ。

  • 解法

書くだけ。
それぞれのパネルの相対的なx座標,y座標をもとめて、最大から最小引いて1足せば長さ。

  • ソース
#include<iostream>

using namespace std;

main(){

  int n;

  while (cin >> n){
    if(n==0)break;
    
    int x[n], y[n];

    x[0] = 0;
    y[0] = 0;

    for(int i=1; i<n; i++){
      int num, d, tx[]={-1, 0, 1, 0}, ty[] = {0, -1, 0, 1};
      cin >> num >> d;

      x[i] = x[num] + tx[d];
      y[i] = y[num] + ty[d];
    }

    int maxix = 0, minix = 10000, maxiy = 0, miniy = 100000;

    for(int i=0; i<n; i++){
      maxix = max(maxix, x[i]);
      minix = min(minix, x[i]);
      maxiy = max(maxiy, y[i]);
      miniy = min(miniy, y[i]);
    }

    

    cout << maxix - minix + 1 << ' ' << maxiy - miniy +1 << endl;
  }
}