#include #include #include #include #include #include /* ACMプログラミング・コンテスト 2010 国内予選 Problem A 角角画伯,かく悩みき 解法例: 正方形を、すでにおいた正方形からの相対的な位置に置き、最後に全体の幅、高さを求める問題。 正方形を置いたときに、全体の幅や高さが変わるときもあれば、そうではないときもある。 その違いは結局現在の正方形がどのようになっているのかを記録しておかなければいけなく、 つまり、正方形を実際においていくことをプログラミングしなければいけない。 そこで、正方形の座標(x,y)を記録していくプログラムを作成した。最初の 0番目の正方形は、とりあえず(0,0)に置くとする。そして例えば0番目の正方形から 上に位置する場所に正方形を置く場合、(0,1)の座標になる。これを最後まで繰り返し、 x軸の最大、最小、y軸の最大、最小を求めて、引いて1足せば幅と高さが求められることになる。 */ int main() { int n; // 正方形の数を読み込み、0でない場合に処理を実行する。 while(scanf("%d",&n) && n!=0){ // 正方形の数(最大200個)と、座標(x,y)の二次元配列 int nodes[200][2]; // 最初の正方形は、(0,0)に置く。 nodes[0][0] = nodes[0][1] = 0; // 2個目以降の正方形を読み込む for(int cnt=1;cnt nodes[cnt][axis]){ min[axis] = nodes[cnt][axis]; } if(max[axis] < nodes[cnt][axis]){ max[axis] = nodes[cnt][axis]; } } } // 最大-最小+1を出力する。 printf("%d %d\n",max[0]-min[0]+1,max[1]-min[1]+1); } return 0; }