VandanRogheliya

Untitled

Jul 20th, 2020
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.15 KB | None | 0 0
  1.     #include<bits/stdc++.h>
  2.     using namespace std;
  3.      
  4.     #define FOR(i, j, k, in) for (int i=j ; i<k ; i+=in)
  5.     #define RFOR(i, j, k, in) for (int i=j ; i>=k ; i-=in)
  6.     #define FO(i, j) FOR(i, 0, j, 1)
  7.     #define RFO(i, j) RFOR(i, j, 0, 1)
  8.     #define all(cont) cont.begin(), cont.end()
  9.     #define rall(cont) cont.end(), cont.begin()
  10.     #define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
  11.     #define mp make_pair
  12.     #define pb push_back
  13.     #define setbits(x) __builtin_popcountll(x)
  14.     #define zrobits(x) __builtin_ctzll(x)
  15.     #define ps(x,y) fixed<<setprecision(y)<<x //cout << ps(ans, decimal places);
  16.     #define INF (int)1e9
  17.     #define EPS 1e-9
  18.     #define PI 3.1415926535897932384626433832795
  19.     typedef pair<int, int> pi;
  20.     typedef pair<long long, long long> pll;
  21.     typedef vector<int> vi;
  22.     typedef vector<long long> vl;
  23.     typedef vector<string> vs;
  24.     typedef vector<pi> vpii;
  25.     typedef vector<vi> vvi;
  26.     typedef vector<vl> vvl;
  27.     typedef map<int,int> mi;
  28.     typedef map<long long,long long> ml;
  29.     typedef set<int> si;
  30.     typedef set<long long> sl;
  31.     typedef long long int ll;
  32.     typedef unsigned long long int  ull;
  33.     typedef priority_queue<ll> mxhpl;
  34.     typedef priority_queue<int> mxhpi;
  35.     typedef priority_queue<ll, vector<ll>, greater<ll>> mnhpl;
  36.     typedef priority_queue<int, vector<int>, greater<int>> mnhpi;
  37.      
  38.     void IO() {
  39.       ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  40.     #ifndef ONLINE_JUDGE
  41.       freopen("input.txt", "r", stdin);
  42.       // freopen("output.txt", "w", stdout);
  43.     #endif
  44.     }
  45.      
  46.     template<typename... T>
  47.     void read(T&... args) {
  48.       ((cin >> args), ...);
  49.     }
  50.      
  51.     template<typename... T>
  52.     void write(T&&... args) {
  53.       ((cout << args << " "), ...);
  54.     }
  55.      
  56.     #define MOD 1000000007
  57.     int mpow(int, int);
  58.     /*******************************************************/
  59.      
  60.     ll a,b,c,lx,rx,ly,ry;
  61.     ll x,y;
  62.      
  63.     ll findGcd(int n, int m) {
  64.       if (!m) {
  65.         x = 1;
  66.         y = 0;
  67.         return n;
  68.       } else {
  69.         int g = findGcd(m,n%m);
  70.         int x1 = x, y1 = y;
  71.         x = y1;
  72.         y = x1 - (n/m)*y1;
  73.         return g;
  74.       }
  75.     }
  76.      
  77.     void shiftXY(ll a, ll b, ll &x, ll &y, ll cnt) {
  78.       x += cnt*b;
  79.       y -= cnt*a;
  80.     }
  81.      
  82.     void solve() {
  83.       read(a,b,c,lx,rx,ly,ry);
  84.       c *= -1;
  85.       int g = findGcd(abs(a),abs(b));
  86.       if (c%g) {
  87.         write(0);
  88.         return;
  89.       }
  90.      
  91.       // write(x,y);
  92.       x *= c/g;
  93.       y *= c/g;
  94.      
  95.       if (a < 0) x = -x;
  96.       if (b < 0) y = -y;
  97.      
  98.       a /= g;
  99.       b /= g;
  100.      
  101.       ll sign_a = (a <= 0) ? -1: 1;
  102.       ll sign_b = (b <= 0) ? -1: 1;
  103.      
  104.       ll lx1, lx2, rx1, rx2;
  105.      
  106.      
  107.       shiftXY(a,b,x,y,(lx-x)/b);
  108.       if (x < lx) shiftXY(a,b,x,y,sign_b);
  109.       if (x > rx) {
  110.         write(0);
  111.         return;
  112.       }
  113.       lx1 = x;
  114.      
  115.       shiftXY(a,b,x,y,(rx-x)/b);
  116.       if (x > rx) shiftXY(a,b,x,y,sign_b * -1);
  117.      
  118.       rx1 = x;
  119.      
  120.       shiftXY(a,b,x,y,-1*(ly-y)/a);
  121.       if (y < ly) shiftXY(a,b,x,y,-1*sign_a);
  122.       if (y > ry) {
  123.         write(0);
  124.         return;
  125.       }
  126.       lx2 = x;
  127.      
  128.       shiftXY(a,b,x,y,-1*(ry-y)/a);
  129.       if (y > ry) shiftXY(a,b,x,y,sign_a);
  130.      
  131.       rx2 = x;
  132.      
  133.      
  134.      
  135.       if (lx2 > rx2) swap(lx2,rx2);
  136.      
  137.       ll finalL = max(lx1,lx2);
  138.       ll finalR = min(rx1,rx2);
  139.      
  140.       if (finalL > finalR) {
  141.         write(0);
  142.       } else {
  143.         write(((finalR-finalL) / abs(b)) + 1);
  144.         // write((finalR,finalL));
  145.         // write("this");
  146.       }
  147.     }
  148.      
  149.     int main() {
  150.       IO();
  151.      
  152.       int t = 1;
  153.       // cin >> t;
  154.       while(t--) {
  155.         solve();
  156.       }
  157.      
  158.       return 0;
  159.     }
  160.      
  161.     /*******************************************************/
  162.     int mpow(int base, int exp) {
  163.       base %= MOD;
  164.       int result = 1;
  165.       while (exp > 0) {
  166.         if (exp & 1) result = ((ll)result * base) % MOD;
  167.         base = ((ll)base * base) % MOD;
  168.         exp >>= 1;
  169.       }
  170.       return result;
  171.     }
Add Comment
Please, Sign In to add comment