結果
| 問題 |
No.78 クジ付きアイスバー
|
| コンテスト | |
| ユーザー |
uafr_cs
|
| 提出日時 | 2015-06-17 01:29:20 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 141 ms / 5,000 ms |
| コード長 | 1,359 bytes |
| コンパイル時間 | 3,229 ms |
| コンパイル使用メモリ | 78,008 KB |
| 実行使用メモリ | 41,440 KB |
| 最終ジャッジ日時 | 2024-11-08 00:32:40 |
| 合計ジャッジ時間 | 8,780 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 35 |
ソースコード
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static long simulate(final int N, int[] S, long K, final long initial_bonus){
long bonus = initial_bonus;
long cost = 0;
for(long i = 0; i < K; i++){
final int index = (int)(i % N);
if(bonus > 0){
bonus--;
}else{
cost++;
}
bonus += S[index];
}
return cost;
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
final int N = sc.nextInt();
final long K = sc.nextLong();
char[] inputs = sc.next().toCharArray();
int[] S = new int[N];
for(int i = 0; i < N; i++){ S[i] = Character.getNumericValue(inputs[i]); }
int one_cycle_cost = 0, one_cycle_bonus = 0;
for(int i = 0; i < N; i++){
if(one_cycle_bonus > 0){
one_cycle_bonus--;
}else{
one_cycle_cost++;
}
one_cycle_bonus += S[i];
}
if(K < N){
System.out.println(simulate(N, S, K, 0));
}else if(one_cycle_bonus > 0){
if(one_cycle_bonus >= one_cycle_cost){
System.out.println(one_cycle_cost);
}else{
System.out.println(one_cycle_cost + Math.max(0, one_cycle_cost - one_cycle_bonus) * Math.max(0, K / N - 1) + simulate(N, S, K % N, one_cycle_bonus));
}
}else{
System.out.println((K / N * one_cycle_cost) + simulate(N, S, K % N, 0));
}
}
}
uafr_cs