leetcode 780. Reaching Points

题目:

A move consists of taking a point (x, y) and transforming it to either (x, x+y) or (x+y, y).

Given a starting point (sx, sy) and a target point (tx, ty), return True if and only if a sequence of moves exists to transform the point (sx, sy) to (tx, ty). Otherwise, return False.

Examples:
Input: sx = 1, sy = 1, tx = 3, ty = 5
Output: True
Explanation:
One series of moves that transforms the starting point to the target is:
(1, 1) -> (1, 2)
(1, 2) -> (3, 2)
(3, 2) -> (3, 5)

Input: sx = 1, sy = 1, tx = 2, ty = 2
Output: False

Input: sx = 1, sy = 1, tx = 1, ty = 1
Output: True

思路:

(tx,ty)肯定是(tx-ty,ty)变来的(tx>ty),递归求解。需要注意的是当1,1,1000000,1时递归很大,需要剪枝,判断可以直接由另一个不断叠加而来就行。

class Solution {
public:
    bool reachingPoints(int sx, int sy, int tx, int ty) {
        if(tx == sx&&ty == sy) return true;
        if(tx<sx||ty<sy) return false;
        if(tx==sx&&ty!=sy){
            if((ty-sy)%sx==0){
                return true;
            } else {
                return false;
            }
        } 
        if(tx!=sx&&ty==sy) {
            if((tx-sx)%sy==0){
                return true;
            } else {
                return false;
            }
        }
        
        if(tx>ty) {
            return reachingPoints(sx,sy,tx-ty,ty);
        } else {
            return reachingPoints(sx,sy,tx,ty-tx);
        }
    }
};

阅读更多

Points

11-04

Descriptionn  A set of integer points on a plane (points whose both cartesian coordinates are integers) which we shall refer to as the pattern, as well as a group of other sets of integer points on the plane are given. We would like to know which of the sets are similar to the pattern, i.e. which of them can be transformed by rotations, translations, reflections and dilations so that they are identical to the pattern.n  For instance: the set of points (0,0), (2,0), (2,1) is similar to the set (6,1), (6,5), (4,5), it is however not similar to the set (4,0),(6,0), (5,-1).n nnInputn  In the first line there is an integer T (1<=T<=15) - the number of test cases. n  For each test case, it begin with a line including a single integer k (1 <= k <= 25000) - the number of points the pattern consists of. In the following k lines there are pairs of integers, separated by single spaces. The i+1st line contains the coordinates of ith point belonging to the pattern: x_i i y_i (-20000 <= x_i, y_i <= 20000). The points forming the pattern are pairwise different. In the next line there is the number of sets to be investigated: n (1 <= n <= 20). Next, there are n descriptions of these sets. The description of each set begins with a line containing a single integer l - the number of points belonging to that particular set (1 <= l <= 25000). These points are described in the following lines, a single point per line. The description of a point consists of two integers separated by a single space - its coordinates x, y (-20000 <= x, y <= 20000). The points which belong to the same set are pairwise different.n nnOutputn  For each test case you should write to the standard output n lines - one for each of the investigated sets of points. The ith line should contain the word "Yes", if the ith of the given sets of points is similar to the pattern, or the word "No" if the set does not satisfy this condition. n  Print a blank line after each test case.n nnSample Inputn1n3n0 0n2 0n2 1n2n3n4 1n6 5n4 5n3n4 0n6 0n5 -1n nnSample OutputnYesnNon

没有更多推荐了,返回首页