Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- using namespace std;
- bool check(unsigned long long& d,long long& m,long long& n){
- long long k = min((long long)sqrt((long double)d/2.0),m), j;
- for(int i =1; i<=k; i++){
- j = (long long)sqrt((long double)(d-i*i));
- if(j*j == d - i*i && j<=n) return true;
- }
- return false;
- }
- inline long long timk(unsigned long long& d,long long& m,long long& k,long long& n){
- long long dem = 0,j;
- for(int i=1; i<=m; i++){
- j = d - i*i;
- if(j >= 0)
- dem += min((long long)sqrt((long double) j ),n);
- else break;
- }
- return dem;
- }
- int main(){
- long long m,n,k;
- cin >> m >> n >> k;
- if(m>n) swap(m,n);
- unsigned long long L = 2,H = m*m + n*n , d;
- d = (L+H+1)/2 ;
- long long p = timk(d,m,k,n);
- while(k != p || !check(d,m,n)){
- if(k != p){
- L = (k>p ? d+1 : L);
- H = (k>p ? H : d-1);
- if(d == (L+H+1)/2) break;
- d = (L+H+1)/2;
- p = timk(d,m,k,n);
- //cout << d;
- }
- else d--;
- }
- cout << d;
- }
Advertisement
Add Comment
Please, Sign In to add comment