Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define FOR(i, j, k, in) for (int i=j ; i<k ; i+=in)
- #define RFOR(i, j, k, in) for (int i=j ; i>=k ; i-=in)
- #define FO(i, j) FOR(i, 0, j, 1)
- #define RFO(i, j) RFOR(i, j, 0, 1)
- #define all(cont) cont.begin(), cont.end()
- #define rall(cont) cont.end(), cont.begin()
- #define FOREACH(it, l) for (auto it = l.begin(); it != l.end(); it++)
- #define mp make_pair
- #define pb push_back
- #define setbits(x) __builtin_popcountll(x)
- #define zrobits(x) __builtin_ctzll(x)
- #define ps(x,y) fixed<<setprecision(y)<<x //cout << ps(ans, decimal places);
- #define INF (int)1e9
- #define EPS 1e-9
- #define PI 3.1415926535897932384626433832795
- typedef pair<int, int> pi;
- typedef pair<long long, long long> pll;
- typedef vector<int> vi;
- typedef vector<long long> vl;
- typedef vector<string> vs;
- typedef vector<pi> vpii;
- typedef vector<vi> vvi;
- typedef vector<vl> vvl;
- typedef map<int,int> mi;
- typedef map<long long,long long> ml;
- typedef set<int> si;
- typedef set<long long> sl;
- typedef long long int ll;
- typedef unsigned long long int ull;
- typedef priority_queue<ll> mxhpl;
- typedef priority_queue<int> mxhpi;
- typedef priority_queue<ll, vector<ll>, greater<ll>> mnhpl;
- typedef priority_queue<int, vector<int>, greater<int>> mnhpi;
- void IO() {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- // freopen("output.txt", "w", stdout);
- #endif
- }
- template<typename... T>
- void read(T&... args) {
- ((cin >> args), ...);
- }
- template<typename... T>
- void write(T&&... args) {
- ((cout << args << " "), ...);
- }
- #define MOD 1000000007
- int mpow(int, int);
- /*******************************************************/
- ll a,b,c,lx,rx,ly,ry;
- ll x,y;
- ll findGcd(int n, int m) {
- if (!m) {
- x = 1;
- y = 0;
- return n;
- } else {
- int g = findGcd(m,n%m);
- int x1 = x, y1 = y;
- x = y1;
- y = x1 - (n/m)*y1;
- return g;
- }
- }
- void shiftXY(ll a, ll b, ll &x, ll &y, ll cnt) {
- x += cnt*b;
- y -= cnt*a;
- }
- void solve() {
- read(a,b,c,lx,rx,ly,ry);
- c *= -1;
- int g = findGcd(abs(a),abs(b));
- if (c%g) {
- write(0);
- return;
- }
- // write(x,y);
- x *= c/g;
- y *= c/g;
- if (a < 0) x = -x;
- if (b < 0) y = -y;
- a /= g;
- b /= g;
- ll sign_a = (a <= 0) ? -1: 1;
- ll sign_b = (b <= 0) ? -1: 1;
- ll lx1, lx2, rx1, rx2;
- shiftXY(a,b,x,y,(lx-x)/b);
- if (x < lx) shiftXY(a,b,x,y,sign_b);
- if (x > rx) {
- write(0);
- return;
- }
- lx1 = x;
- shiftXY(a,b,x,y,(rx-x)/b);
- if (x > rx) shiftXY(a,b,x,y,sign_b * -1);
- rx1 = x;
- shiftXY(a,b,x,y,-1*(ly-y)/a);
- if (y < ly) shiftXY(a,b,x,y,-1*sign_a);
- if (y > ry) {
- write(0);
- return;
- }
- lx2 = x;
- shiftXY(a,b,x,y,-1*(ry-y)/a);
- if (y > ry) shiftXY(a,b,x,y,sign_a);
- rx2 = x;
- if (lx2 > rx2) swap(lx2,rx2);
- ll finalL = max(lx1,lx2);
- ll finalR = min(rx1,rx2);
- if (finalL > finalR) {
- write(0);
- } else {
- write(((finalR-finalL) / abs(b)) + 1);
- // write((finalR,finalL));
- // write("this");
- }
- }
- int main() {
- IO();
- int t = 1;
- // cin >> t;
- while(t--) {
- solve();
- }
- return 0;
- }
- /*******************************************************/
- int mpow(int base, int exp) {
- base %= MOD;
- int result = 1;
- while (exp > 0) {
- if (exp & 1) result = ((ll)result * base) % MOD;
- base = ((ll)base * base) % MOD;
- exp >>= 1;
- }
- return result;
- }
Add Comment
Please, Sign In to add comment