思路
- 注意数据范围 1 ≤ n , m ≤ 1 0 9 1 \le n,m\le 10^9 1≤n,m≤109,所以肯定不能用暴力模拟的方法。
- 观察样例考虑两种大情况: n = m n = m n=m 和 n ≠ m n \ne m n=m。
- 当 n = m n=m n=m 时分两种小情况:
- 当
n
m
o
d
2
=
0
n \bmod 2=0
nmod2=0 时,此时走到最后一定剩下一个
2
×
2
2 \times2
2×2 的正方形,必然朝左(如图中绿色部分)。
- 当 n m o d 2 = 1 n \bmod 2=1 nmod2=1 时,同理,走到最后一定剩下一个 1 × 1 1\times 1 1×1 的正方形,必然朝右。
- 当 n ≠ m n \ne m n=m 时又分两种小情况:
- 当
min
(
n
,
m
)
m
o
d
2
=
0
\min(n,m) \bmod2=0
min(n,m)mod2=0 时,此时走完剩下一个长为
2
2
2 的倍数的长方形(如图中绿色部分),只需判断这个长方形的朝向,通过比较
n
n
n 和
m
m
m 的大小即可,如果
m
>
n
m>n
m>n 必定朝左,否则朝上。
- 当 min ( n , m ) m o d 2 = 1 \min(n,m) \bmod2=1 min(n,m)mod2=1,与第一种情况同理,走完只剩下一个宽为 1 1 1 的长方形,如果 m > n m>n m>n 必定朝右,否则朝下。
代码
#include<bits/stdc++.h>
#define int long long//注意开long long
using namespace std;
int t,n,m,x;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
cin>>n>>m;
x=min(n,m);
if(n==m)
{
if(n%2==0)
cout<<"L\n";
else
cout<<"R\n";
}
else
{
if(x%2==1)
{
if(m<n)
cout<<"D\n";
else
cout<<"R\n";
}
else
{
if(m<n)
cout<<"U\n";
else
cout<<"L\n";
}
}
}
return 0;
}