結果
問題 |
No.3114 0→1
|
ユーザー |
![]() |
提出日時 | 2025-04-20 17:29:00 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 244 ms / 2,000 ms |
コード長 | 1,880 bytes |
コンパイル時間 | 2,758 ms |
コンパイル使用メモリ | 86,744 KB |
実行使用メモリ | 58,324 KB |
最終ジャッジ日時 | 2025-04-20 17:29:12 |
合計ジャッジ時間 | 11,526 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
import java.util.Scanner; public class Main { private static void printBitArray(boolean[] array, int startIndex) { for (int i = startIndex; i < array.length; i++) { System.out.print(array[i] ? 1 : 0); } System.out.println(); } private static void toBitArray(String s, boolean[] bitArray, int padding, int fullLength) { for (int i = 0; i < padding - 1; i++) { bitArray[i] = true; } for (int i = padding - 1; i < fullLength; i++) { bitArray[i] = s.charAt(i - padding + 1) == '1'; } } private static int calculateMinChanges(String input, int originalLength, int windowSize) { int minWeight = (windowSize + 1) / 2; int fullLength = originalLength + minWeight - 1; int changeCount = 0; int currentWeight = 0; boolean[] bits = new boolean[fullLength]; toBitArray(input, bits, minWeight, fullLength); for (int i = 0; i < windowSize; i++) { if (bits[i]) currentWeight++; } if (currentWeight < minWeight) { bits[windowSize - 1] = true; currentWeight++; changeCount++; } for (int i = 1; i <= fullLength - windowSize; i++) { if (bits[i - 1]) currentWeight--; if (bits[i + windowSize - 1]) currentWeight++; if (currentWeight < minWeight) { bits[i + windowSize - 1] = true; currentWeight++; changeCount++; } } return changeCount; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); String s = scanner.next(); scanner.close(); int result = calculateMinChanges(s, N, 3); System.out.println(result); } }