TopCoder SRM 525(11/29 21:00~23:00)
DropCoins
やるだけ.
public int getMinimum(String[] ss, int K){ int n=ss.length; int m=ss[0].length(); int[][] sum=new int[n+1][m+1]; for(int j=0; j<n; j++){ debug(ss[j]); for(int i=0; i<m; i++){ sum[j+1][i+1]=sum[j+1][i]+sum[j][i+1]-sum[j][i]; if(ss[j].charAt(i)=='o'){ sum[j+1][i+1]++; } } } int ret=INF; for(int y1=0; y1<n; y1++){ for(int x1=0; x1<m; x1++){ for(int y2=y1+1; y2<=n; y2++){ for(int x2=x1+1; x2<=m; x2++){ // [x1, x2)*[y1, y2) int all=sum[y2][x2]+sum[y1][x1]-sum[y1][x2]-sum[y2][x1]; if(all==K){ int dx=min(x1*2+(m-x2), x1+(m-x2)*2); int dy=min(y1*2+(n-y2), y1+(n-y2)*2); ret=min(ret, dx+dy); debug(x1, y1, x2, y2, dx+dy); } } } } } return ret==INF?-1:ret; }
Challenge Phase
TLEになると思ったケースの撃墜に失敗した.
Result
ox- +0/-1 208.09pts. 350th
1704 -> 1699