7月2日にACM ICPCの国内予選があったらしい。
懐かしいなーと思って、寝る前に久しぶりに問題を解いてみようと思った。
http://honiden-lab.ex.nii.ac.jp/events/icpc2010/contest/A_ja.html
・・・Javaの書き方を忘れてEclipseに怒られまくったorz
サンプルのInput, Outputは一発であったけどこれで合ってるかはわからんし、所要時間が40分とか鈍ってる気がする。
そのうち10分ぐらいはJavaのお作法との戦いだった気がするということにしてください・・・
以下汚いソースコード
package problemA; import java.awt.Point; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class ProblemA { final static int INIT = 200; static Point checkSize(List<Point> pointList){ Point low = new Point(INIT, INIT); Point high = new Point(INIT, INIT); for(Point p : pointList){ if(high.x < p.x) high.x = p.x; if(p.x < low.x) low.x = p.x; if(high.y < p.y) high.y = p.y; if(p.y < low.y) low.y = p.y; } Point ans = new Point(); ans.x = high.x - low.x + 1; ans.y = high.y - low.y + 1; return ans; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); for(;;){ int n; n = sc.nextInt(); if(n == 0) break; int ni, di; List<Point> pointList = new ArrayList<Point>(); Point p = new Point(INIT,INIT); pointList.add(p); for(int i = 0; i < n - 1; i++){ ni = sc.nextInt(); p = pointList.get(ni); Point next = new Point(p.x, p.y); di = sc.nextInt(); switch(di){ case 0: next.x-=1; break; case 1: next.y+=1; break; case 2: next.x+=1; break; case 3: next.y-=1; break; } pointList.add(next); } Point ans = checkSize(pointList); System.out.println(ans.x + " " + ans.y); } } }