実現したいこと
ABC380 C - Move segments(https://atcoder.jp/contests/abc380/tasks/abc380_c)
で、0が連続している部分と1が連続している部分をSblockによってリスト化し、問題文通りにswapするアルゴリズムを組みました。
発生している問題・分からないこと
計算量はo(10^6)だと思うのですが、なぜか2つのケースでのみTLEします。
みんなの解答や公式解答を見る限り、特別悪い実装ではないと思うのですが、いかがでしょう?
該当のソースコード
python
1def list_int(numbers): 2 numbers_list = map(int, numbers.split(" ")) 3 # 数を入力する スペースで区切る int型にしている 4 numbers_list = list(numbers_list) 5 return numbers_list 6 7 8N, K = list_int(input()) 9 10S = input() 11 12Sblock = [] 13block = "" 14 15for i in range(len(S)): 16 if block == "": 17 block = S[i] 18 continue 19 if block[0] == "0" == S[i] or block[0] == "1" == S[i]: 20 block = "".join([block, S[i]]) 21 else: 22 Sblock.append(block) 23 block = S[i] 24 25if block != "": 26 Sblock.append(block) 27 block = "" 28 29 30onecnt = 0 31for i in range(len(Sblock)): 32 if Sblock[i][0] == "1": 33 onecnt += 1 34 if onecnt == K: 35 swap1 = Sblock[i - 1] 36 swap2 = Sblock[i] 37 Sblock[i - 1] = swap2 38 Sblock[i] = swap1 39 break 40 41S_ans_str = "".join(Sblock) 42print(S_ans_str) 43
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
文字列連結のメソッドを+からjoinに変更しましたが、うまくいきませんでした。
補足
特になし
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/11/17 02:04