Problem:
Score : 200 points

Problem Statement

You are given nonnegative integers a and b (a ≤ b), and a positive integer x.
Among the integers between a and b, inclusive, how many are divisible by x?

Constraints

0 ≤ a ≤ b ≤ 10^{18}

1 ≤ x ≤ 10^{18}

Input

The input is given from Standard Input in the following format:

a b x

Output

Print the number of the integers between a and b, inclusive, that are divisible by x.

Sample Input 1

4 8 2

Sample Output 1

3

There are three integers between 4 and 8, inclusive, that are divisible by 2: 4, 6 and 8.

Sample Input 2

0 5 1

Sample Output 2

6

There are six integers between 0 and 5, inclusive, that are divisible by 1: 0, 1, 2, 3, 4 and 5.

Sample Input 3

9 9 2

Sample Output 3

0

There are no integer between 9 and 9, inclusive, that is divisible by 2.

Sample Input 4

1 1000000000000000000 3

Sample Output 4

333333333333333333

Watch out for integer overflows.

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    using vi = vector<int>;
    using vi2 = vector<vector<int>>;
    using vb = vector<bool>;
    using vb2 = vector<vector<bool>>;
    using vc = vector<char>;
    using vc2 = vector<vector<char>>;
    using vs = vector<string>;
    using si = set<int>;
    using vs2 = vector<vector<string>>;
    using pii = pair<int, int>;
    using mii = map<int, int>;
    const int INF = 1e9;
    const ll LINF = 1e18;
    #define MP(a,b) make_pair((a),(b))
    #define MT(...) make_tuple(__VA_ARGS__)
    #define sz(x) (int)(x).size()
     
    #define FOR(i,a,b) for(int i=(a);i<(b);++i)
    #define REP(i,x) for(int i=0;i<(int)(x);i++)
    #define REPS(i,x) for(int i=1;i<=(int)(x);i++)
    #define RREP(i,x) for(int i=((int)(x)-1);i>=0;i--)
    #define RREPS(i,x) for(int i=((int)(x));i>0;i--)
     
    #define ALL(x) (x).begin(),(x).end()
    #define IN(type,a) type a;cin >> a;
    #define VIN(type,a,n) vector<type> a(n);cin >> a;
    #define YES(n) cout << ((n) ? "YES" : "NO"  ) << endl;
    #define Yes(n) cout << ((n) ? "Yes" : "No"  ) << endl;
    #define COUT(x) cout << (x) << endl;
    #define DCOUT(x,n) cout << fixed << setprecision(n) << (x) << endl;
    template<typename T>inline istream& operator>>(istream&i,vector<T>&v)
    {REP(j,sz(v))i>>v[j];return i;}
    template<typename T>
    T gcd(T x, T y){
        if ((x==1)||(y==1)) return 1;
        if (x>y) {
            if (x%y==0) {
                return y;
            }else{
                return gcd(y, x%y);
            }
        }else{
            if (y%x==0) {
                return x;
            }else{
                return gcd(x, y%x);
            }
        }
    }  
    int main() {
        ll a,b,c;
      cin >> a >> b >> c;
      if(a==0){
      	if(b==0){
			COUT(1);
        }else{
          COUT(b/c+1);
        }
      }else {
      COUT(b/c-(a-1)/c);
      }
    }