【题意】
给定n,m的方格大小,给定k个起始点,和k个终点。
请问通过上下左右,每个起始点都按对应方向移动,如果碰到墙则留在原地,请问经历多少次才能至少遇到k个终点至少一次。
【题解】
由于限定的次数上限很大,足以我们逐个遍历每一个点。
首先把所有点都移动到左上角,然后按每一行走蛇形遍历到右下角。
【具体代码】
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<algorithm> 5 #include<iostream> 6 using namespace std; 7 typedef long long ll ; 8 const ll mod = 1e9 + 7 ; 9 const int N = 1e3 + 10; 10 int main() 11 { 12 int n,m,k; 13 scanf("%d%d%d",&n,&m,&k); 14 for( int i = 1 ,x,y; i <= 2 * k ; i ++ ){ 15 scanf("%*d%*d"); 16 } 17 18 printf("%d ",n*m+n+m-2); 19 //返回左上角 20 for( int i = 0 ; i < n-1 ; i++ ) printf("U") ; 21 for( int i = 0 ; i < m-1 ; i++ ) printf("L") ; 22 23 //蛇形遍历所有位置 24 for( int i = 0 ; i < n; i++){ 25 for( int j = 0 ; j < m - 1; j++ ){ 26 printf("%c",i%2?'L':'R'); 27 } 28 printf("D"); 29 } 30 printf(" "); 31 return 0; 32 }