結果
| 問題 |
No.3114 0→1
|
| コンテスト | |
| ユーザー |
Sillpherth
|
| 提出日時 | 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);
}
}
Sillpherth