1 yokan

https://atcoder.jp/contests/typical90/tasks/typical90_a

C言語

#include <stdio.h>
#include <stdlib.h>

// プロトタイプ宣言
int check(int N, int K, int* A, int scoreC);

int main(void) {
    // 入力
    int N, L, K;
	scanf("%d %d\\n%d\\n", &N, &L, &K);

	int* A;
  	A = (int*)malloc(sizeof(int) * N);
    for (int i = 0; i < N; i++) {
        scanf("%d", &A[i]);
    }

    // 最後の値はLとする
    A[N] = L;

    // スコアの設定
	int scoreA = 1;
	int scoreB = L;

    // 二分探索
	while(scoreA != scoreB){
		int scoreC = (scoreA + scoreB) / 2 + 1;

		int scoreD = check(N, K, A, scoreC);
		
		if(scoreD == 1){
			scoreA = scoreC;
		}else{
			scoreB = scoreC - 1;
		}
	}
	
	printf("%d\\n", scoreA);
  
  	free(A);

	return 0;
}

int check(int N, int K, int* A, int scoreC){
	int cutA = 0;
	int cutNum = 0;

    // 差分計算
	for(int i = 0; i < N + 1; i++){
		if(i == 0){
			cutA = A[0];
		}else{
			cutA += A[i] - A[i-1];
		}
		if(cutA >= scoreC){
			cutA = 0;
			cutNum++;
		}
	}

	if(cutNum > K){
		return 1;
	}else{
		return 0;
	}
}