solution.md 2.6 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 分巧克力
F
fix bug  
feilong 已提交
2

每日一练社区's avatar
每日一练社区 已提交
3 4 5 6 7 8 9 10 11
儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。  
小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。  
为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:  
1. 形状是正方形,边长是整数
2. 大小相同    

例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。  
当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?  
#### 输入
F
fix bug  
feilong 已提交
12

每日一练社区's avatar
每日一练社区 已提交
13 14 15 16
第一行包含两个整数N和K。(1 <= N, K <= 100000)  
以下N行每行包含两个整数Hi和Wi。(1 <= Hi, Wi <= 100000)  
输入保证每位小朋友至少能获得一块1x1的巧克力。  
#### 输出
F
fix bug  
feilong 已提交
17

每日一练社区's avatar
每日一练社区 已提交
18 19
输出切出的正方形巧克力最大可能的边长。
#### 样例输入:
F
fix bug  
feilong 已提交
20

每日一练社区's avatar
每日一练社区 已提交
21 22 23 24 25 26
```
2 10
6 5
5 6
```
#### 样例输出:
F
fix bug  
feilong 已提交
27

每日一练社区's avatar
每日一练社区 已提交
28 29 30 31 32 33 34
```
2
```



## aop
F
fix bug  
feilong 已提交
35

每日一练社区's avatar
每日一练社区 已提交
36
### before
F
fix bug  
feilong 已提交
37

每日一练社区's avatar
每日一练社区 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
```cpp
#include <stdio.h>
#include <string.h>
int co[100100][2];

int coun(int n, int x)
{
    int sum = 0;
    for (int i = 0; i < n; i++)
    {
        sum += (co[i][0] / x) * (co[i][1] / x);
    }
    return sum;
}

```
### after
F
fix bug  
feilong 已提交
55

每日一练社区's avatar
每日一练社区 已提交
56 57 58 59 60 61 62 63 64 65 66 67 68
```cpp
int main()
{
    int n;
    int k;
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i++)
        scanf("%d%d", &co[i][0], &co[i][1]);
    printf("%d\n", binary(n, k));
}
```

## 答案
F
fix bug  
feilong 已提交
69

每日一练社区's avatar
每日一练社区 已提交
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
```cpp
int binary(int n, int k)
{
    int l = 0, r = 100000;
    while (l < r)
    {
        int mid = (r - l) / 2 + l;
        if (coun(n, mid) < k)
            r = mid - 1;
        else if (coun(n, mid) > k)
            l = mid + 1;
        else
            return mid;
    }
    return r;
}
```
## 选项

F
fix bug  
feilong 已提交
89

每日一练社区's avatar
每日一练社区 已提交
90
### A
F
fix bug  
feilong 已提交
91

每日一练社区's avatar
每日一练社区 已提交
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
```cpp
int binary(int n, int k)
{
    int l = 0, r = 100000;
    while (l < r)
    {
        int mid = (r - l) / 2 + l;
        if (coun(n, mid) < k)
            r = mid;
        else if (coun(n, mid) > k)
            l = mid;
        else
            return mid;
    }
    return r;
}
```

### B
F
fix bug  
feilong 已提交
111

每日一练社区's avatar
每日一练社区 已提交
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
```cpp
int binary(int n, int k)
{
    int l = 0, r = 100000;
    while (l < r)
    {
        int mid = (r - l) / 2 + l;
        if (coun(n, mid) > k)
            r = mid;
        else if (coun(n, mid) < k)
            l = mid;
        else
            return mid;
    }
    return r;
}
```

### C
F
fix bug  
feilong 已提交
131

每日一练社区's avatar
每日一练社区 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
```cpp
int binary(int n, int k)
{
    int l = 0, r = 100000;
    while (l < r)
    {
        int mid = (r - l) / 2 + l;
        if (coun(n, mid) > k)
            r = mid - 1;
        else if (coun(n, mid) < k)
            l = mid + 1;
        else
            return mid;
    }
    return r;
}
```