[codeforces 1327C] Game with Chips 有点象飞行棋

Educational Codeforces Round 84 (Rated for Div. 2)   比赛人数13522

[codeforces 1327C]  Game with Chips    有点象飞行棋

总目录详见https://blog.csdn.net/mrcrack/article/details/103564004

也在线测评地址https://codeforces.ml/contest/1327/problem/C

Problem Lang Verdict Time Memory
C - Game with Chips GNU C++11 Accepted 15 ms 0 KB

有点象飞行棋,故题意读起来比较顺利。

因题目反复暗示不超过2*n*m步,故有了基本思路,

先让所有棋子,移到棋盘的左上角(此种情况最多花费步数n-1+m-1),

再让所有棋子一块从左上角开始,遍历所有棋盘格子,到达棋盘的右下角(此种情况最多花费步数(m-1)*n+n-1),

总步数n-1+m-1+(m-1)*n+n-1<2*n*m

遍历过程如图所示:

注意该题,没有输出-1的情况,所有格子均能在2*n*m步内完成。

AC代码如下

#include <cstdio>
#include <algorithm>
using namespace std;
char cmd[80010];
int x[205],y[205],X,Y;
int main(){
	int n,m,k,i,a,b,len,j;
	scanf("%d%d%d",&n,&m,&k);
	for(i=1;i<=k;i++){
		scanf("%d%d",&x[i],&y[i]);
		X=max(X,x[i]),Y=max(Y,y[i]);//记录离左上角格子,最远的行位置,最远列位置。
	}
	for(i=1;i<=k;i++)scanf("%d%d",&a,&b);//读取需要到达的格子位置,读完就丢弃,因不影响结果
	X--,Y--;
	for(i=1;i<=X;i++)cmd[i]='U';//棋子回归左上角
	for(i=1;i<=Y;i++)cmd[X+i]='L';//棋子回归左上角
	len=X+Y;
	for(i=0;i<n;i++){//棋子从左上角出发,遍历所有格子,到达右下角
		for(j=0;j<m-1;j++){
			if(i%2==0)cmd[++len]='R';//偶数行,棋子向右动
			else cmd[++len]='L';//奇数行,棋子向左动
		}
		if(i!=n-1)cmd[++len]='D';//从上一行到下一行,棋子向下动
	}
	cmd[len+1]=0;//设置字符串结束		
	printf("%d\n",len);
	printf("%s\n",cmd+1);
}
发布了631 篇原创文章 · 获赞 553 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/mrcrack/article/details/105064113
今日推荐