C++の練習を兼ねて, AtCoder Grand Contest 052 の 問題A (Long Common Subsequence) を解いてみた.
■感想.
1. 解答方針が見えなかったので, 解説を参考に実装して, ようやく, AC版に到達できた.
2. 時間を見つけて, 引き続き, 過去問を振り返っていきたいと思う.
本家のサイト AtCoder Grand Contest 052 解説 の 各リンク を ご覧下さい.
■C++版プログラム(問題A/AC版).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
// 解き直し. // https://atcoder.jp/contests/agc052/editorial/880 // C++(GCC 9.2.1) #include <bits/stdc++.h> using namespace std; #define repex(i, a, b, c) for(int i = a; i < b; i += c) #define repx(i, a, b) repex(i, a, b, 1) #define rep(i, n) repx(i, 0, n) #define repr(i, a, b) for(int i = a; i >= b; i--) #define pb push_back int main(){ // 1. 入力情報. int T; scanf("%d", &T); // 2. 各テストケースに解答. rep(i, T){ // 2-1. 入力情報. int N; char s1[202020], s2[202020], s3[202020]; scanf("%d %s %s %s", &N, s1, s2, s3); string S1(s1), S2(s2), S3(s3); // 2-2. 解説通り. string ans = ""; rep(j, N) ans.pb('0'); rep(j, N) ans.pb('1'); ans.pb('0'); // 2-3. 出力. printf("%s\n", ans.c_str()); } return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
[入力例] 2 1 01 01 10 2 0101 0011 1100 [出力例] 010 11011 ※AtCoderのテストケースより 但し, 上記のプログラムでは, 以下の内容が出力される. 010 00110 [入力例] 3 1 01 10 10 2 0110 1010 1001 3 000111 111000 101010 [出力例] 010 00110 0001110 |
■参照サイト
AtCoder Grand Contest 052