@@ -19,46 +19,37 @@ Help Shaky in finding out what is the maximum number of candies which a student
19
19
*/
20
20
21
21
22
- #include < bits/stdc++.h>
23
-
22
+ #include < bits/stdc++.h>
24
23
using namespace std ;
25
- int is_possible (vector<int > v, int k, int mid){
26
- int n = v.size ();
27
- int givento = 0 ;
28
-
29
- int i = 0 ;
30
- while (i<n){
31
- givento += v.at (i)/mid;
32
-
33
- }
34
-
35
- return (givento >= k);
36
- }
37
24
38
- int go (vector<int > v, int k){
39
25
40
- int n = v.size ();
41
- sort (v.begin (), v.end ());
26
+ int go (int * arr, int k,int n){
27
+
28
+ sort (arr,arr+n);
42
29
43
- int max_candies = v. at ( n-1 ) ;
30
+ int max_candies = arr[ n-1 ] ;
44
31
int min_candies = 0 ;
45
- int mid = (min_candies+max_candies)/2 ;
46
-
47
- int i = 0 ;
48
- int ans = 0 ;
32
+ int mid ;
33
+ int ans = 1 ;
49
34
35
+
50
36
while (max_candies>=min_candies){
51
- if (is_possible (v, k, mid))
52
- {
53
- ans = max (ans, mid);
54
- min_candies = mid+1 ;
55
- mid = (min_candies+max_candies)/2 ;
56
-
57
- }else {
58
- max_candies = mid-1 ;
59
- mid = (min_candies+max_candies)/2 ;
60
- }
61
- }
37
+ mid = (min_candies+max_candies)/2 ;
38
+ int given=0 ;
39
+ for (int i=0 ;i<n;i++)
40
+ {
41
+ given+=arr[i]/mid;
42
+ }
43
+
44
+ if (given>=k){
45
+ ans=max (ans,mid);
46
+ min_candies=mid+1 ;
47
+ }
48
+ else {
49
+ max_candies=mid-1 ;
50
+ }
51
+
52
+ }
62
53
63
54
return ans;
64
55
@@ -67,25 +58,18 @@ int go(vector<int> v, int k){
67
58
68
59
69
60
70
- int main ( int argc , char ** argv )
61
+ int main ( )
71
62
{
72
- ios_base::sync_with_stdio (false ) ;
73
- cin.tie (NULL ) ;
74
-
75
63
int t;
76
64
cin>>t;
77
65
78
66
while (t--){
79
67
int n, k;
80
68
cin>>n>>k;
81
- int m=n;
82
- std::vector<int > v;
83
- while (m--){
84
- int a;
85
- cin>>a;
86
- v.push_back (a);
87
- }
88
- cout << go (v,k) << ' \n ' ;
69
+ int * arr=new int [n];
70
+ for (int i=0 ;i<n;i++)
71
+ cin>>arr[i];
72
+ cout << go (arr,k,n) << endl;
89
73
}
90
74
91
75
return 0 ;
0 commit comments