SRM319 div2
medium
できなかった。時間かかり過ぎ.
端的に言うと、条件を満たす3点をとってその最小の長さをとるというもの.
距離順にソートしてからだと(0, 0) (0, 1)(1, 0)(0, 2)
みたいになってしまいうまくいかない.
double getArrangement(string leftRow, string rightRow) { const int row = 2; const int col = 10; vector<string> s(2); s[0] = leftRow; s[1] = rightRow; vector<dot> seats; for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { if(s[i][j] == '-') { seats.push_back(dot(i, j) ); } } } sort(seats.begin(), seats.end(), cmp() ); int sz = seats.size(); double ans = INF; for(int i = 2; i < sz; i++) { double tmp = calc(seats[i-2].X-seats[i-1].X, seats[i-2].Y-seats[i-1].Y) + calc(seats[i-1].X-seats[i].X, seats[i-1].Y-seats[i].Y) + calc(seats[i].X-seats[i-2].X, seats[i].Y-seats[i-2].Y); ans = min(ans, tmp); } return ans; }