본문 바로가기
Computer Science

균형점

by OKOK 2019. 1. 24.

1. 균형점

2. 바이너리 서치

3. 인덱스로 들어가는 점

4. EPS 표시하는 것

5. 어떻게 하는지 명확히 할 것 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
#define EPS (0.000000000001)
#define N 10
 
int n;
int pos[N];
int weight[N];
 
double binarySearch(int l, int r)
{
    double left = (double)pos[l];
    double right = (double)pos[r];
 
    while ((right - left) > EPS)
    {
        int i;
        double mid = (right + left) / 2;
        double leftSum = 0, rightSum = 0;
 
        for (i = 0; i <= l; ++i)
        {
            double value = (weight[i] / (mid -pos[i]) / (mid-pos[i]));
            leftSum += value;
        }
 
        for (i = r; i < n; ++i)
        {
            double value = (weight[i]) / (pos[i]-mid) / (pos[i]-mid);
            rightSum += value;
        }
 
        if (leftSum > rightSum)
            left = mid;
        else
            right = mid;
    }
    return left;
}
 
int main()
{
    freopen("input.txt""r", stdin);
    int t;
    int i, j;
    scanf("%d"&t);
    for (i = 0; i < t; ++i)
    {
        printf("#%d ", i + 1);
        scanf("%d"&n);
 
        for (j = 0; j < n; ++j)
            scanf(" %d"&pos[j]);
 
        for (j = 0; j < n; ++j)
            scanf(" %d"&weight[j]);
 
        for (j = 0; j < n - 1++j)
            printf("%.10lf ", binarySearch(j, j + 1));
 
        printf("\n");
    }
    return 0;
}
cs

 


'Computer Science' 카테고리의 다른 글

행렬찾기  (0) 2019.01.28
K번째 문자열  (0) 2019.01.28
최대 상금  (0) 2019.01.24
암호코드 스캔  (0) 2019.01.24
단순 2진 암호코드  (0) 2019.01.24

댓글