SRM457 DIV2
1139->1060 oh...
問題 | 結果 | 備考 |
---|---|---|
250 | ○ | 143.56pt - 0:29:33 |
500 | × | 後で解答見て解いた |
1000 | − |
250 - TheSquareDivTwo
Problem Statement for TheSquareDivTwo
- チェッカーを全部左に寄せて90度左回転させたものが答え
- 移動前の各列のチェッカーの数=移動後の各行のチェッカーの数
import java.util.*; public class TheSquareDivTwo { public String[] solve(String[] board) { int len = board.length; String[] res = new String[len]; int[] a = new int[len]; for(int i=0; i<len; i++){ res[i] = ""; } for(int i=0; i<len; i++){ int b = 0; for(int j=0; j<len; j++){ if(board[i].charAt(j)=='C') b++; } a[i] = b; } for(int i=0; i<len; i++){ for(int j=0; j<len; j++){ if(len-a[i]<=j){ res[j]+="C"; }else { res[j]+="."; } } } return res; } }
一日置いてもう一度。ちょっとだけすっきり。
import java.util.*; public class TheSquareDivTwo { public String[] solve(String[] board) { int len = board.length; String[] res = new String[len]; Arrays.fill(res, ""); int[] a = new int[len]; for(int i=0; i<len; i++){ for(int j=0; j<len; j++){ if(board[i].charAt(j)=='C') a[i]++; } } for(int i=0; i<len; i++){ for(int j=0; j<len; j++){ res[j] += (len-a[i])<=j ? "C" : "." ; } } return res; } }
500 - TheTriangleBothDivs
Problem Statement for TheTriangleBothDivs
『時刻が与えられるので標準時に直して返してね。?になってる部分は何入れてもいいから一番早い時間になるように返してね。』
時間内に解けなかったのでTop Submissionを参考に解き方を理解してから書き直しました。
全部の候補を試し、条件に合う候補の中から一番小さいものを返します。
import java.util.*; public class TheTriangleBothDivs { public String fix(String t) { String res = ""; int resi = Integer.MAX_VALUE; for(int h=0; h<24; h++){ for(int m=0; m<60; m++){ for(int gmt=-9; gmt<10; gmt++){ String sb = String.format("%02d:%02d GMT%c%d", h, m, (gmt<0)?'-':'+', Math.abs(gmt)); boolean b = true; for(int i=0; i<sb.length(); i++){ if(t.charAt(i)=='?' || t.charAt(i)==sb.charAt(i)) continue; b = false; } if(!b) continue; int hh = (24+h-gmt)%24; int f = hh*60 + m; if(f<resi){ resi = f; res = String.format("%02d:%02d", hh, m); } } } } return res; } }
メモ
- String.format()の存在を知らなかった
- もっと早いうちにあれこの解き方だめじゃね?と気付くようにしようね!!!!
- char -> intの変換は Character.digit()より -'0' で
- 過去問もっと解く