Dang_Quan_10_Tin

NUMORDERED

Jul 22nd, 2020
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. bool check(unsigned long long& d,long long& m,long long& n){
  7.     long long k = min((long long)sqrt((long double)d/2.0),m), j;
  8.     for(int i =1; i<=k; i++){
  9.         j = (long long)sqrt((long double)(d-i*i));
  10.         if(j*j == d - i*i && j<=n) return true;
  11.     }
  12.     return false;
  13. }
  14.  
  15. inline long long timk(unsigned long long& d,long long& m,long long& k,long long& n){
  16.     long long dem = 0,j;
  17.     for(int i=1; i<=m; i++){
  18.         j = d - i*i;
  19.         if(j >= 0)
  20.             dem += min((long long)sqrt((long double) j ),n);
  21.         else break;
  22.     }
  23.     return dem;
  24. }
  25.  
  26. int main(){
  27.     long long m,n,k;
  28.     cin >> m >> n >> k;
  29.     if(m>n) swap(m,n);
  30.     unsigned long long L = 2,H = m*m + n*n , d;
  31.     d = (L+H+1)/2 ;
  32.     long long p = timk(d,m,k,n);
  33.    
  34.     while(k != p || !check(d,m,n)){
  35.         if(k != p){
  36.             L = (k>p ? d+1 : L);
  37.             H = (k>p ? H : d-1);
  38.             if(d == (L+H+1)/2) break;
  39.             d = (L+H+1)/2;
  40.             p = timk(d,m,k,n);
  41.             //cout << d;
  42.         }
  43.         else d--;
  44.     }
  45.     cout << d;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment