287B - Pipeline - CodeForces Solution


binary search math *1700

Please click on ads to support us..

Python Code:

n, k= list(map(int,str.split(input())))

max_pos=(((k-1)*k)//2)+1
if n==1:
  print(0)
elif n<=k:
  print(1)
elif n>max_pos:
  print(-1)
else:
  m=((1+(1-(4*(n-max_pos)*2))**0.5)/2)
  if m*(m-1)+n>max_pos:
    m-=1
  print(int(k-m))

C++ Code:

// Online C++ compiler to run C++ program online
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n,k;
    cin>>n>>k;
    long long low=0,high=k;
    long long maxpipes=(k*(k-1))/2+1;
    while(low<=high){
        long long mid=low+(high-low)/2;
        long long poss=(k*mid)-((mid*(mid+1))/2)+1;
        if(poss<n)low=mid+1;
        else high=mid-1;
    }
    
    if(low>k){
        cout<<-1;
    }else cout<<low;
    return 0;
}


Comments

Submit
0 Comments
More Questions

454A - Little Pony and Crystal Mine
2A - Winner
1622B - Berland Music
1139B - Chocolates
1371A - Magical Sticks
1253A - Single Push
706B - Interesting drink
1265A - Beautiful String
214A - System of Equations
287A - IQ Test
1108A - Two distinct points
1064A - Make a triangle
1245C - Constanze's Machine
1005A - Tanya and Stairways
1663F - In Every Generation
1108B - Divisors of Two Integers
1175A - From Hero to Zero
1141A - Game 23
1401B - Ternary Sequence
598A - Tricky Sum
519A - A and B and Chess
725B - Food on the Plane
154B - Colliders
127B - Canvas Frames
107B - Basketball Team
245A - System Administrator
698A - Vacations
1216B - Shooting
368B - Sereja and Suffixes
1665C - Tree Infection