if S[0] == S[len(S)-1]:
i += 1
は繰り返すときの最後の文字置き換えを考慮していると思いますが
以下のケースを考える必要があります。
・K=1の時は演算不要
・前のループで最後の文字を置き換える場合は連続しなくなるためそれの考慮が必要
例えばS="aa", K=2の場合、"aaaa"の置き換え結果は"a?a?"です(?は任意文字)。終端文字を置き換えるため始端とはマッチしません。
は連続した文字列である場合、カウントを半分に減らす実装と思いますが
必ず半分に減らしていいわけではありません。
例:"aaa"であれば隣接回数2だが"a?a"となるため1回にする
ですが"aabb"の場合、隣接回数2ですが"a?b?"となり2回を維持する必要があります。
単純に割っていいわけではないのでループの中で考慮するべき内容かと思います。
あとlen(S)=1、K>=3の場合の考慮がいるかなと思います。
例えば、K="a" K=3の場合、文字列は"aaa"となり、"a?a"と置き換える必要があります。
上記を考慮するとこんなコードになるかなと思います。
Python
1S = list(input())
2K = int(input())
3i = 0
4
5if len(S) == 1:
6 i = int(K/2)
7else:
8
9 #隣接する文字をカウント(連続は除く)
10 last_char = S[0]
11 for x in range(1, len(S)):
12 if last_char == S[x]:
13 last_char = '?' # Sは英小文字なので次回はマッチしない
14 i += 1
15 else:
16 last_char = S[x]
17
18 # 繰り返しを考慮
19 i *= K
20
21 # 繰り返しにより離接する箇所を考慮
22 if (K > 1) and (S[0] == last_char):
23 i += K-1
24
25print(i)