diff --git a/src/apple.c b/src/apple.c index 766d543..44b0631 100644 --- a/src/apple.c +++ b/src/apple.c @@ -4,6 +4,15 @@ int n; int k; int A[100000]; +int p(int index[],int mid){ + int sum = 0; + int a; + for(a=0;a 1){ + int mid = (lb + ub)/2; + //ここで評価する + if(p(A, mid) <= k){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n",ub); return 0; } diff --git a/src/array.c b/src/array.c index 13ed925..8984083 100644 --- a/src/array.c +++ b/src/array.c @@ -11,8 +11,17 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - - + lb = -1; + ub = n; + while(ub - lb > 1){ + int mid = (lb + ub)/2; + if(A[mid] >= k){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n",ub); return 0; } diff --git a/src/spear.c b/src/spear.c index 766d543..afe0680 100644 --- a/src/spear.c +++ b/src/spear.c @@ -4,6 +4,15 @@ int n; int k; int A[100000]; +int p(int index[],int mid){ + int sum = 0; + int a; + for(a=0;a 1){ + int mid = (lb + ub)/2; + if(p(A, mid) < k){ + ub = mid; + } + //k以上になった時に下限を上げて終了条件 + else{ + lb = mid; + } + } + printf("%d\n",lb); return 0; } diff --git a/src/works.c b/src/works.c index 766d543..82b6ef7 100644 --- a/src/works.c +++ b/src/works.c @@ -4,6 +4,34 @@ int n; int k; int A[100000]; +int p(int index[],int mid){ + int sum = 0; + //人数のカウント、これとkを比較し評価 + int count = 1; + int a; + for(a=0;a=index[a]){ + sum=sum+index[a]; + //仕事量がmid超えるか確認 + if(sum>mid){ + //次の人に移る + count=count+1; + //次の仕事を保存 + sum=index[a]; + } + } + else{ + //ありえないパターン + return k+1; + } + } + if(count>k){ + return k+1; + } + else{ + return count; + } +} int main(){ int i, lb, ub; @@ -11,7 +39,18 @@ int main(){ for(i = 0; i < n; i++){ scanf("%d", &A[i]); } - - + lb = 0; + ub = 1000000000; + while(ub - lb > 1){ + int mid = (lb + ub)/2; + //ここで評価する + if(p(A, mid) <= k){ + ub = mid; + } + else{ + lb = mid; + } + } + printf("%d\n",ub); return 0; }