【构造】【CF1327-C】Game with Chips

【题意】

  给定n,m的方格大小,给定k个起始点,和k个终点。

  请问通过上下左右,每个起始点都按对应方向移动,如果碰到墙则留在原地,请问经历多少次才能至少遇到k个终点至少一次。

【题解】

  由于限定的次数上限很大,足以我们逐个遍历每一个点。

  首先把所有点都移动到左上角,然后按每一行走蛇形遍历到右下角。

【具体代码】

 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",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("\n");
31     return 0;
32 }
View Code

猜你喜欢

转载自www.cnblogs.com/Osea/p/12602900.html