さてようやく最後。
http://arc013.contest.atcoder.jp/assignments
C++の時の記事。
http://kmjp.hatenablog.jp/entry/2013/03/23/0900
http://kmjp.hatenablog.jp/entry/2013/03/23/0930
A - 梱包できるかな?
大きな直方体の中に、小さな直方体を同じ向きで何個詰め込めるか最大値を答える。
小さな直方体のどの辺をどの辺に平行にするかで6通り試せばよい。
B=map(int,raw_input().split(" ")) L=map(int,raw_input().split(" ")) m=max((B[0]/L[0])*(B[1]/L[1])*(B[2]/L[2]),(B[1]/L[0])*(B[0]/L[1])*(B[2]/L[2])) m=max(m, (B[0]/L[0])*(B[2]/L[1])*(B[1]/L[2]), (B[1]/L[0])*(B[2]/L[1])*(B[0]/L[2])) m=max(m, (B[2]/L[0])*(B[0]/L[1])*(B[1]/L[2]), (B[2]/L[0])*(B[1]/L[1])*(B[0]/L[2])) print(m)
B - 引越しできるかな?
複数の直方体の大きさを与えられるので、それぞれを1箱で内包できる大きな直方体のサイズの最小堆積を答える。
各直方体の辺の長さをソートと、1番目同士・2番目同士・3番目同士の最大値の積を取ればよい。
C=input() M=[0,0,0] for i in range(C): B=map(int,raw_input().split(" ")) B.sort() M[0]=max(M[0],B[0]) M[1]=max(M[1],B[1]) M[2]=max(M[2],B[2]) print(M[0]*M[1]*M[2])
C - 笑いをとれるかな?
ハバネロの入った位置の外側の座標についてnim処理を行えばよい。
C++で書いたときは一旦値を配列に入れたけど、考えたら配列入れずに適宜xorすれば十分だね。
nim=0 N=input() for i in range(N): bx,by,bz=map(int,raw_input().split(" ")) ix=iy=iz=10**10 ax=ay=az=0 M=input() for j in range(M): hx,hy,hz=map(int,raw_input().split(" ")) ix=min(ix,hx) iy=min(iy,hy) iz=min(iz,hz) ax=max(ax,hx) ay=max(ay,hy) az=max(az,hz) nim ^= ix^iy^iz^(bx-1-ax)^(by-1-ay)^(bz-1-az) print("LOSE" if nim==0 else "WIN")
まとめ
これでARC#013まで追いついたということで、Python練習編はこれで終了。
今後は本番もC++とPythonの書きやすい方で書いていこう。
AやBで、文字列主体ならPythonにしようかな。