POJ 2499 Binary Tree

http://poj.org/problem?id=2499

题意:从(1,1)开始

向左走为(2,1),向右走为(1,2)

规律是 (m,n)

向左走为(m+n,n),向右走为(m,n+m)

求 要走到所给坐标 需要向左走多少步,向右走多少步;

 

思路:手写几步找下规律

逆向思维,从(m,n)到(1,1)。

给定(m,n),求其上一坐标,如果m>n,则上一坐标是(m-n,n),

否则(m,n-m)。

得到代码:

 1 #include<stdio.h>

 2 int main()

 3 {

 4     int n,i,m,h;

 5     int l,r;

 6     scanf("%d",&h);

 7     for(i=1;i<=h;i++)

 8     {

 9         l=r=0;

10         scanf("%d %d",&m,&n);

11         {

12             while(m!=1||n!=1)

13             {

14                 if(m>n)

15                 {l++;

16                 m=m-n;}

17                 else if(m<n)

18                 {

19                     r++;

20                     n=n-m;

21                 }

22             }

23         }

24         printf("Scenario #%d:\n",i);

25         printf("%d %d\n\n",l,r);

26     }

27     return 0;

28 }
View Code

代码TLE

换个思路:

规律又有,当m>n时;

向左走的次数为m%n 所到坐标为(m%n,n)

特殊情况,当m%n==0的时候

向左走的次数为m%n-1

当m<n时 类似

代码:

 1 #include<stdio.h>

 2 int main()

 3 {

 4     int a,h,n,m,l,r;;

 5     scanf("%d",&a);

 6     for(h=1;h<=a;h++)

 7     {

 8         scanf("%d %d",&m,&n);

 9         {

10             l=r=0;

11             while(m!=1||n!=1)

12             {

13                 if(m>n)

14                 {

15                     if(m%n!=0)

16                     {

17                         l=l+m/n;

18                         m=m%n;

19                     }

20                     else

21                     {

22                         l=l+m/n-1;

23                         m=1;

24                     }

25                 }

26                 else

27                 {

28                     if(n%m!=0)

29                     {

30                         r=r+n/m;

31                         n=n%m;

32                     }

33                     else

34                     {

35                         r=r+n/m-1;

36                         n=1;

37                     }

38                 }

39             }

40             printf("Scenario #%d:\n%d %d\n\n",h,l,r);

41         }

42     }

43     return 0;

44 }
View Code

 

你可能感兴趣的:(binary)