前提
ABC009 C問題
にて、テストケースは通るのですが、どうしてもAC出来ません。
どこが違うのかご教授いただけると幸いです。
方針
辞書順比較なので、前方からソートされた文字列で埋めていけばいい。
ソートされた文字列が格納されているリストをsorted_Sとし、Sと、sorted_Sを前方から確認していく。
- Sとsorted_Sのi番目が一致すればcontinue
- 不一致なら、sorted_S[i]とS[i]を入れ替える
この操作が終わった後、cntで今現在のSと、もともとのS(noChange)を比較し、j番目の文字列が異なればcntに1プラス。cntがKを超えれば上記操作を行う前に定義したbefore_Sを表示し、終了。
追記
以下のコードの"以下修正"部分を解答頂いたように修正しましたが、正解数は増えたものの、完全に正解することはできませんでした。
python
1import copy 2 3N, K = map(int, input().split()) 4S = list(input()) 5noChange = copy.deepcopy(S) 6 7sorted_S = sorted(S) 8 9for i in range(len(S)): 10 11 if S[i] == sorted_S[i]: 12 continue 13 14 #操作する前のS 15 before_S = copy.deepcopy(S) 16 17 tmp = S[i] 18 #辞書順比較したときに後ろに追いやる文字のインデックスを取得 19 #以下修正 20 idx = "".join(S).rfind(sorted_S[i]) 21 S[i] = sorted_S[i] 22 S[idx] = tmp 23 24 #もともとの文字列との差分を計算し、Kを超えていればbefore_Sを表示し終了 25 cnt = 0 26 for j in range(N): 27 if noChange[j] != S[j]: 28 cnt += 1 29 if cnt > K: 30 print("".join(before_S)) 31 exit() 32 33print("".join(S))

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。