Coder-Strike 2014 - Round 1A: Poster
一問目
30分もこの問題にかけてしまった。
B問題よりも難しく感じたのは自分だけだろうか?
・問題
N個の区画に分けられた横長のポスターがある。
また、自分は今、k番目の区画の前に立っている。
このポスターのそれぞれの区画に決められたN個のキャラクターを描きたい。
それぞれの区画にキャラクターを描く際には、その区画の前に立たないといけない。
一つの区画にキャラクターを描く作業に1時間
区画の移動(左右どちらでも)に1時間
がかかるとき、
最短で全ての区画のキャラクターを書き終える動きを出力せよ。
※出力オプション
ポスターに”x”を描く→PRINT x
左に移動→LEFT
右に移動→RIGHT
・解法
最短の動きというのは、
①現地点から近い方の端まで移動
↓
②ポスターにキャラクターを描く
↓
③移動
↓
②③をもう一方の端まで繰り返す。
これを実装するだけ。
非常に簡単な問題だが、読解に時間がかかり死亡
・ソース
import java.util.Scanner; public class A { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); String s = sc.next(); int pos = k-1; while(pos!=0 && pos!=n-1){ if(pos <= (n-1)/2){ System.out.println("LEFT"); pos--; }else{ System.out.println("RIGHT"); pos++; } } int way; if(pos==0)way=1; else way=-1; int pos2 = pos; for(int i=0; i<n; i++){ if(way==1){ System.out.println("PRINT "+s.charAt(pos2)); if(i!=n-1)System.out.println("RIGHT"); pos2++; }else{ System.out.println("PRINT "+s.charAt(pos2)); if(i!=n-1)System.out.println("LEFT"); pos2--; } } sc.close(); } }