MX 模拟赛二总结

哈哈,从来没想过还会再考一次 MX 的题……

T1

题面:

水到不能再水的题……大概就普及组第一题的难度。

代码自己写。

T2

题面:

注意题中的两个限制:

  1. 其中一部分字母在一条直线上,另一部分字母在另一条直线上。
  2. 两个方向形成一个直角拐弯。

如果这题就是一个单纯的找单词,那还真不好写,但有了这两条限制,我相信还是很容易写出正解的吧……

代码:

#include<bits/stdc++.h>
#define int long long
#define code using
#define by namespace
#define plh std
code by plh;
int n,m,len,ans,fx[8][2]={
   
   1,0,0,-1,-1,0,0,1,1,1,-1,1,-1,-1,1,-1},b[8][2]={
   
   1,3,0,2,1,3,0,2,5,7,4,6,5,7,4,6};
char mp[106][106];
string s;
void dfs(int x,int y,int id,int f,bool fl)
{
   
   
	if(id==len-1)
	{
   
   
		ans++;
		return;
	}
	int xx=x+fx[f][0],yy=y+fx[f][1];
	if(xx<1||xx>n||yy<1||yy>m)
	{
   
   
		if(!fl&&id!=0)
		{
   
   
			dfs(x,y,id,b[f][0],1);
			dfs(x,y,id,b[f][1],1);
		}
		return;
	}
	if(mp[xx][yy]!=s[id+1])
	{
   
   
		if(fl||id==0)
		{
   
   
			return;
		}
		dfs(x,y,id,b[f][0],1);
		dfs(x,y,id,b[f][1],1);
	}
	else
	{
   
   
		dfs(xx,yy,id+1,f,fl);
		if(fl||id==0)
		{
   
   
			return;
		}
		dfs(x,y,id,b[f][0],1);
		dfs(x,y,id,b[f][1],1);
	}
}
signed main()
{
   
   
//	freopen("treasure.in","r",stdin);
//	freopen("treasure.out","w",stdout);
	cin>>s;
	cin>>n>>m;
	len=s.size();
	for(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值