2023.9.25

B. 发愿者的客厅

内存限制:256 MiB时间限制:1000 ms标准输入输出

题目类型:传统评测方式:文本比较

转到题库提交记录返回比赛

题目描述

-----因为"我已触摸过天空",所以我仍继续飞翔

在暑假里,37Lament 游玩了一款名为《Remnant 2》的游戏,在游戏的一个关卡中,你需要在 发愿者的客厅与一名NPC进行下棋游戏,当你取得了胜利,你才能前往下一个副本。

这个游戏的规则与井字棋十分的相似,当一方的三颗棋子在一条直线上时(横着,竖着,斜着),此方将获得胜利。而每一次操作棋子,只能向没有棋子的位置沿着实线移动一格。

例:

在这个图里,你执白棋,箭头指向的位置为你本次操作的所有选择,但你仅能选择一种

而当出现以下情况,为白棋获胜(在斜线方向三个棋子存在一个方向)

现在,你将执白棋,给定你当前的棋盘,你需要将任意一个白棋移动一个 位置。在移动过后,白棋是获胜平局 ,还是黑棋在白棋获胜之前获胜

输入格式

输入第一行包含整数 T,表示测试数据组数。

对于每一组测试数据,输入一个3x3 的矩阵表示当前的棋局情况,W 表示白棋所在的位置,B 表示黑棋所在的位置,而 . 表示没有棋子所在的空位。

输出格式

对于每一组测试数据,如果在移动过后白棋能够获胜输出Win! ,如果两方都没有获胜,输出Draw ,但如果黑棋在白棋获胜之前获胜,输出Lose

样例

样例输入

复制代码
2
W.W
.B.
BBW
WW.
B.W
.BB

样例输出

复制代码
Draw
Win!
数据范围与提示

T(1 ≤ T ≤ 10) 给出的棋局都是白棋未能获胜的棋局

用一个函数 check(char c) 表示整个地图字符 c 是否赢了

首先就看看 check('B'),看看黑色点是否已经赢了,如果已经赢了输出 Lose

我们枚举所有白色的操作,如果其中有一种操作可以赢那就输出 Win!

都没输出的话,就是平局,输出Draw

trick: 用一个数组 表示八个方向的下标变化情况,这样就可以一个循环枚举往哪走了

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int t,nx,ny,wx[5],wy[5],w;
int dx[8]={-1,-1,-1,0,0,1,1,1};
int dy[8]={-1,0,1,-1,1,-1,0,1};
char mp[4][4];
bool fg;
bool check(char tr)
{
	for(int i=1;i<=3;i++)
	{
		if(mp[i][1]==tr&&mp[i][2]==tr&&mp[i][3]==tr)
			return true;
		if(mp[1][i]==tr&&mp[2][i]==tr&&mp[3][i]==tr)
			return true;	 
	}
	if(mp[1][1]==tr&&mp[2][2]==tr&&mp[3][3]==tr)
		return true;
	if(mp[1][3]==tr&&mp[2][2]==tr&&mp[3][1]==tr)
		return true;	
	return false;	
}
int main()
{
	scanf("%d",&t);
	for(int tt=1;tt<=t;tt++)
	{
		w=0;
		fg=false;
		for(int i=1;i<=3;i++)
			scanf("%s",mp[i]+1);
		if(check('B')==true)
		{
			printf("Lose\n");
			continue;
		}	
		for(int i=1;i<=3;i++)
		for(int k=1;k<=3;k++)
			if(mp[i][k]=='W')
				for(int j=0;j<=7;j++)
				{
					nx=i+dx[j];
					ny=k+dy[j];
					if(nx>=1&&nx<=3&&ny>=1&&ny<=3&&mp[nx][ny]=='.')
					{
						swap(mp[i][k],mp[nx][ny]);
						if(fg==false&&check('W')==true)
						{
							printf("Win!\n");
							fg=true;
						}
						swap(mp[i][k],mp[nx][ny]);
					}
				}
		if(fg==false)
			printf("Draw\n");
	}	
	return 0;
}

D. 萨斯噶joker!(easy version)

内存限制:256 MiB时间限制:1000 ms标准输入输出

题目类型:传统评测方式:文本比较

题目描述

ComistryMo 暑假打通了P5R 之后,意外获得了怪盗团的力量,穿越到了异世界。但是他没有进行二周目,给邪恶的大人们发出预告信,而是沉迷于大富翁

但是他太菜了!以至于芳泽霞学妹必须给ComistryMo放牌! 作为团长,为了捍卫自己的威严,他决定与怪盗团成员玩数学游戏来取代大富翁。

他出的题目是这样的:给定一个正整数n,以及长度为n的无序排列p,定义操作 为交换任意位置的两个数,定义花费 为进行一次操作时交换的两个数的差的绝对值,定义代价为通过操作使得排列p变为严格递增的花费和,现在请求出最小代价。 但是ComistryMo不会做这个题目,因此他想请聪明的你们来帮助他,解决此题,维护团长的尊严!

输入格式

第一行包含一个整数n,表示排列p长度。

第二行给出n个数字,表示到 (1 <= <= n)。

输出格式

输出一行一个整数,表示最小代价

样例

样例输入

复制代码
3
3 2 1

样例输出

复制代码
2
数据范围与提示

排列长度n (1 <= n <= 6)

相关推荐
无限进步_7 分钟前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
小超超爱学习993723 分钟前
大数乘法,超级简单模板
开发语言·c++·算法
Ricardo-Yang38 分钟前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法
凌波粒38 分钟前
LeetCode--344.反转字符串(字符串/双指针法)
算法·leetcode·职场和发展
啊哦呃咦唔鱼1 小时前
LeetCode hot100-543 二叉树的直径
算法·leetcode·职场和发展
sinat_286945191 小时前
harness engineering
人工智能·算法·chatgpt
少许极端2 小时前
算法奇妙屋(四十三)-贪心算法学习之路10
学习·算法·贪心算法
算法鑫探2 小时前
10个数下标排序:最大值、最小值与平均值(下)
c语言·数据结构·算法·排序算法·新人首发
样例过了就是过了2 小时前
LeetCode热题100 爬楼梯
c++·算法·leetcode·动态规划
IronMurphy2 小时前
【算法三十七】51. N 皇后
算法·深度优先