Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define (div a b)
- (if (>= (* a b) 0)
- (floor (/ a b))
- (+ (floor (/ a b)) 1)))
- (define (gcd a b)
- (define (make-ret-val n-val)
- (list (car n-val)
- (- (caddr n-val)
- (* (div b a) (cadr n-val)))
- (cadr n-val)))
- (if (= a 0)
- (list b 0 1)
- (make-ret-val (gcd (remainder b a) a))))
- (define (diof-solve a b c)
- (define (make-ret-val n-val)
- (if (= 0 (remainder c (car n-val)))
- (list #t (floor (/ (* (cadr n-val) c) (car n-val)))
- (floor (/ (* (caddr n-val) c) (car n-val)))
- (car n-val))
- (list #f 0 0 0)))
- (cond ((and (= a 0) (= b 0))
- (if (= c 0)
- (list #t 0 0 0)
- (list #f 0 0 0)))
- ((= a 0)
- (if (= 0 (remainder c b))
- (list #t 0 (floor (/ c b)) 0)
- (list #f 0 0 0)))
- ((= b 0)
- (if (= 0 (remainder c a))
- (list #t (floor (/ c a)) 0 0)
- (list #f 0 0 0)))
- (else (make-ret-val (gcd a b)))))
- (define (solve-task rx ry a b)
- (define (solve-task-subproc sol)
- (define (make-kl)
- (if (not (= 0 (remainder (* (cadr sol) (cadddr sol)) b)))
- (+ (floor (/ (* (- (cadr sol)) (cadddr sol)) b)) 1)
- (floor (/ (* (- (cadr sol)) (cadddr sol)) b))))
- (define (make-kh)
- (if (not (= 0 (remainder (* (caddr sol) (cadddr sol)) a)))
- (+ (floor (/ (* (caddr sol) (cadddr sol)) a)) 1)
- (floor (/ (* (caddr sol) (cadddr sol)) a))))
- (define (solve-task-subsubproc kl kh)
- (define (sub-sub-sub kkl kkh)
- (cond
- ((= kkl -2000000000)
- (+ (cadr sol) (floor (/ (* kkh b) (cadddr sol)))
- (- (caddr sol)) (floor (/ (* kkh a) (cadddr sol)))))
- ((= kkh 2000000000)
- (+ (cadr sol) (floor (/ (* kkl b) (cadddr sol)))
- (- (caddr sol)) (floor (/ (* kkl a) (cadddr sol)))))
- (else (min
- (+ (cadr sol) (floor (/ (* kkh b) (cadddr sol)))
- (- (caddr sol)) (floor (/ (* kkh a) (cadddr sol))))
- (+ (cadr sol) (floor (/ (* kkl b) (cadddr sol)))
- (- (caddr sol)) (floor (/ (* kkl a) (cadddr sol))))))))
- (sub-sub-sub (max (if (> (* b (cadddr sol)) 0) kl -2000000000)
- (if (> (* a (cadddr sol)) 0) kh -2000000000))
- (min (if (< (* b (cadddr sol)) 0) kl 2000000000)
- (if (< (* a (cadddr sol)) 0) kh 2000000000))))
- (cond ((not (car sol)) -1)
- ((= a 0)
- (max -1 (- (caddr sol))))
- ((= b 0)
- (max -1 (cadr sol)))
- (else
- (solve-task-subsubproc (make-kl) (make-kh)))))
- (max -1 (solve-task-subproc (diof-solve a b (- ry rx)))))
- (display (solve-task (read) (read) (read) (read)))
- (display (newline))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement