CareerCup Facebook Alex moving on a table

265 篇文章 1 订阅
86 篇文章 0 订阅
Alex is standing on the top left cell (1,1) of a n*m table. The table has n rows and m columns. Initially, he is facing its right cell. He moves on the table in the following way: 

>He moves one step forward. 
>He turns to his right 
>While moving forward, if he would go out of the table or reach a visited cell, he turns to his right. 

He moves in the table as much as he can. Can you find out the number of cells he visits before he stops? 

For example, given a 9x9 grid, the following would be his moves. The number on each cell represents the step he would land on that particular cell. 
1 2 55 54 51 50 47 46 45 
4 3 56 53 52 49 48 43 44 
5 6 57 58 79 78 77 42 41 
8 7 60 59 80 75 76 39 40 
9 10 61 62 81 74 73 38 37 
12 11 64 63 68 69 72 35 36 
13 14 65 66 67 70 71 34 33 
16 15 20 21 24 25 28 29 32 
17 18 19 22 23 26 27 30 31 

Input: 
The first line of the input contains two integer numbers n and m. 
n and m are between 1 and 100. 

Output: 
Print an integer to the output being the answer of the test. 

Sample input #00: 
3 3 

Sample output #00: 


Sample input #01: 
7 4 

Sample output #01: 

18

--------------------------------------------------


if(n==1 || m==1) {
      cout<<(n+m-1) ; 
   }
   else if((n%2)&&(m%2)) {
    cout<<(n*m);
   }
   else if(n%2) {
       cout<<((n*m)-((n-2)*(m-2)));
    }
   else {
     cout<<(n*2);
   }
@Anonymous
Agree! But I guess you need to explain it a little bit...

Ok, the point is that, first assume n>=2 and m>=2, in this case you can convince yourself that the Alex has no difficulty moving to the bottom of the table, but
1) He can continue doing similar movement to the right if n is odd.
2) He is stuck at the bottom-left corner if n is even.
In case 2) the tiles he cover is 2*n; in case 1) he can move all the way to the right, then he is facing the situation just like before: 3) if m is odd he can continue to move upwards, 4) otherwise he is stuck in the bottom-right corner.
In case 3) the problem actually reduces to a smaller size problem if you rotate the board by 180 degrees, and Alex eventually can travel anywhere on the board.
In case 4) the number of tiles he travel is 2*n + 2*(m-2).

Finally, you need to take care the boundary cases when n==1 or m==1, which is not hard (see Anonymous' solution above).




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值