ABC051: C - Back and Forth
問題
C: Back and Forth - AtCoder Beginner Contest 051 | AtCoder
解答
1週目は行き帰りで(sx, sy), (tx, ty)に沿ってできる長方形の辺を辿れば最短距離で移動できる。 2週目は長方形の辺をその一回り大きく回るだけで良い。余分な移動数が行き帰り4個ずつで8個出来る。
int main() { int sx, sy, tx, ty; cin >> sx >> sy >> tx >> ty; std::stringstream ss; // phase1 for (int i = sx; i < tx; i++) { ss << "R"; } for (int i = sy; i < ty; i++) { ss << "U"; } for (int i = sx; i < tx; i++) { ss << "L"; } for (int i = sy; i < ty; i++) { ss << "D"; } // phase2 ss << "D"; for (int i = sx; i < tx + 1; i++) { ss << "R"; } for (int i = sy; i < ty + 1; i++) { ss << "U"; } ss << "L"; ss << "U"; for (int i = sx; i < tx + 1; i++) { ss << "L"; } for (int i = sy; i < ty + 1; i++) { ss << "D"; } ss << "R"; std::cout << ss.str() << "\n"; // std::cout << ss.str().size() << "\n"; // assert(ss.str().size() == string("UURRURRDDDLLDLLULUUURRURRDDDLLDL").size()) assert(ss.str().size() == (tx - sx + ty - sy) * 4 + 8); }