Codeforces1327C - Game with Chips(思维/构造)

Description

Petya has a rectangular Board of size n×m. Initially, k chips are placed on the board, i-th chip is located in the cell at the intersection of sxi-th row and syi-th column.

In one action, Petya can move all the chips to the left, right, down or up by 1 cell.

If the chip was in the (x,y) cell, then after the operation:

left, its coordinates will be (x,y−1);
right, its coordinates will be (x,y+1);
down, its coordinates will be (x+1,y);
up, its coordinates will be (x−1,y).
If the chip is located by the wall of the board, and the action chosen by Petya moves it towards the wall, then the chip remains in its current position.

Note that several chips can be located in the same cell.

For each chip, Petya chose the position which it should visit. Note that it’s not necessary for a chip to end up in this position.

Since Petya does not have a lot of free time, he is ready to do no more than 2nm actions.

You have to find out what actions Petya should do so that each chip visits the position that Petya selected for it at least once. Or determine that it is not possible to do this in 2nm actions.

Input

The first line contains three integers n,m,k (1≤n,m,k≤200) — the number of rows and columns of the board and the number of chips, respectively.

The next k lines contains two integers each sxi,syi (1≤sxi≤n,1≤syi≤m) — the starting position of the i-th chip.

The next k lines contains two integers each fxi,fyi (1≤fxi≤n,1≤fyi≤m) — the position that the i-chip should visit at least once.

Output

In the first line print the number of operations so that each chip visits the position that Petya selected for it at least once.

In the second line output the sequence of operations. To indicate operations left, right, down, and up, use the characters L,R,D,U respectively.

If the required sequence does not exist, print -1 in the single line.

题目大意

有一个n×m大小的矩形板,上面有k个芯片,每个芯片都有它需要访问的位置,你需要通过移动,使所有的芯片经过它需要访问的位置至少一次,每次操作你可以将所有的芯片同时向上下左右移动一个格子。最多操作2×n×m次。问是否能够有一种移动能过满足要求。
如果芯片移动到边界再向边界外移动的时候会被板壁阻挡,不能向外移动。而且芯片可以重叠

思路

既然这个会被板壁阻挡并且可重叠还不要求操作最少,那可以先将所有的芯片移动到右下角,再将其移动其余的所有格子一次那肯定满足要求了。
需要的操作次数为
n-1(将板子左上角移动到最下面一行)+m-1(将板子左上角移动到右下角的位置)+n×m-1(移动到其余每一个格子一次)
也就是n+m+n×m-3 < 2×n×m

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+5;
int main()
{
	int n,m,k,x,y;
	scanf("%d %d %d",&n,&m,&k);
	for(int i=1;i<=k;++i){
		scanf("%d %d",&x,&y);
	}
	for(int i=1;i<=k;++i){
		scanf("%d %d",&x,&y);
	}
	printf("%d\n",n+m+n*m-3);
	for(int i=1;i<n;++i)putchar('D');
	for(int i=1;i<m;++i)putchar('R');
	for(int i=1;i<=n;++i){
		if(i&1){
			for(int i=1;i<m;++i)putchar('L');
		}else{
			for(int i=1;i<m;++i)putchar('R');
		}
		if(i!=n)putchar('U');
	}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43984169/article/details/105642819
今日推荐