Cod sursa(job #2324164)

Utilizator StefanZamfirStefan Zamfir StefanZamfir Data 20 ianuarie 2019 12:34:58
Problema Factorial Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <queue>
#include <stack>
#include <map>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <set>
#include <algorithm>
#include <bitset>
#include <time.h>
#include <tuple>
#include <fstream>
#include <iomanip>
#include <utility>

#pragma warning "da 100% din tine. :)"
#define nl '\n'
#define sp ' '
#define pb(x) push_back(x)
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define SIZE 3000
#define NR 105
#define N 11
#define INF 10000

using namespace std;

int calc(int nb){
    int result = 0;
    for(int i=1;i<=12;++i){
        result += nb/(int)pow(5,i);
    }
    return result;
}

int caut(int P){
    int dr = P*5;
    int st = 0;
    int mid, res;
    int lsmid = -1;
    while(st<dr){
        mid = (dr+st)/2/5*5;
//        cout << st << ' ' << mid << ' ' << dr << nl;
        if(st==mid||dr==mid)
            return -1;
        res = calc(mid);
        if(res==P){
            return mid;
        }
        else if(res>P){
            dr = mid;
        }
        else st = mid;

    }
    return -1;
}

int main() {
    freopen("fact.in", "r", stdin);
    freopen("fact.out", "w", stdout);
    ios_base::sync_with_stdio(false);
//    clock_t tStart = clock();
    int P, p5 = 0, x;
    cin >> P;
    if(P==0){
        cout << 1;
        return 0;
    }
    if(P<5){
        cout << P*5;
        return 0;
    }
    cout << caut(P);

//    printf("\nTime taken: %.2fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
}