首页 > 其他分享 >P8854 [POI2002] 超级马 题解

P8854 [POI2002] 超级马 题解

时间:2023-10-16 14:25:46浏览次数:40  
标签:int 题解 P8854 POI2002 vis && 100 初始

这题其实就是搜索,不知道怎么评绿的。

题意

有一个大小无限的棋盘,有一只马,给定 \(n\) 种跳法,判断马是否能跳到棋盘所有点。

题解

搜索马是否可以跳到他上下左右的四个点,因为只要能跳到这四个点,就可以以这四个点为基础跳到其他所有的点。
这里有一些细节需要处理:

  • 因为每次操作能是横纵坐标加减 100,所以将马的位置放在(100,100),避免数组越界。

  • 每组数据需要清零标记数组。

  • 初始搜索是要标记马的初始点位

时间稳过。

AC CODE

#include<bits/stdc++.h>
using namespace std;
int n,dx[105],dy[105],vis[205][205];
bool ok;
struct M{
	int x,y;
};
void bfs(){
	queue<M>q;
	q.push((M){100,100});//马初始要在(100,100) 
	vis[100][100]=1;
	while(!q.empty()){
		M u=q.front();
		q.pop();
		if(vis[101][100]&&vis[100][101]&&vis[100][99]&&vis[99][100]){//判断周围的四个点是否能到 
			ok=1;
			break;
		}
		for(int i=1;i<=n;i++){
			int nx=u.x+dx[i];
			int ny=u.y+dy[i];
			if(nx>=1&&nx<=200&&ny>=1&&ny<=200&&!vis[nx][ny]){
				q.push((M){nx,ny});
				vis[nx][ny]=1;
			}
		}
	}
	if(vis[101][100]&&vis[100][101]&&vis[100][99]&&vis[99][100]){
		ok=1;
	}
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		for(int i=1;i<=200;i++){//清空数组 
			for(int j=1;j<=200;j++){
				vis[i][j]=0;
			}
		}
		cin>>n;
		for(int i=1;i<=n;i++){
			scanf("%d%d",dx+i,dy+i);
		}
		ok=0;
		bfs();
		if(ok)puts("TAK");
		else puts("NIE");
	}
	return 0;
}

标签:int,题解,P8854,POI2002,vis,&&,100,初始
From: https://www.cnblogs.com/xdh2012/p/17767204.html

相关文章

  • CF1873E Building an Aquarium 题解
    这题看到第一眼就是二分。单调性二分最关键的东西是单调性在哪。单调性是如果高度越高,需要的水就越多,高度越矮,要用的水越少。不难得出代码:check函数:intcheck(intmid){ intsum=0; for(inti=1;i<=n;i++){ sum+=max(0ll,mid-a[i]); } if(sum<=x)returnsum; elsere......
  • html2canvas 截图不全问题解决
    有个低代码平台项目,需求是要将canvas画布上的echarts图表等组件截图保存,如果是正常比例(也就是百分百比例)截图是正常的,但如果画布处于缩放状态进行截图的话就会因组件上的一些样式影响而导致截图不全。为了解决这一问题,在网上也查找了很多资料,终于找到解决办法,亲测有效。话不多说,......
  • 第二届“梦羽杯”题解
    前言特别鸣谢出(蒯)题人:CJYA原题:NOIP2008普及组T4《立体图》B原题:HAOI2007反素数C......
  • 题解 AcWing 1272. 与众不同
    题目描述定义完美序列:若一个序列内没有重复的数,称这个数列为完美数列。每次给定一个区间\([l,r]\),求这个区间内最长的完美序列长度。具体思路设\(len_i\)表示从\(i\)出发往右的最长完美序列长度。我们定义一个指针\(st\),表示当前枚举的区间左端点,同时定义多一个指针\(......
  • ARC167D Good Permutation 题解
    题意给定一个长度为\(N\)的排列\((P_1,P_2,\cdots,P_N)\)。称一个排列\(P\)为“好排列”当且仅当对于所有\(1\leqx\leqN\),都能通过不停地使\(x\leftarrowP_x\)将\(x\)变成\(1\)。通过最小次数操作将\(P\)变成“好排列”,每次操作为交换\(P\)中的两个数\(P_i\)......
  • [CSP-S2019] 树的重心 题解
    [CSP-S2019]树的重心因为这道题令我十分兴奋,所以来写一下做完后的思考。这道题用到了树的重心的种种性质,在写解法的时候会一一点出其用处。首先,枚举每一条边,然后各自\(O(n)\)扫一次的\(O(n^2)\)做法是简单的。那么接下来,就会出现不同的解法了:优化\(O(n)\)求解的过程......
  • P9290 Luna likes Love 题解
    原题:[洛谷P9310]([P9310EGOI2021]LunalikesLove/卢娜爱磕cp-洛谷|计算机科学教育新生态(luogu.com.cn))题目大意给定一个长度为\(\large2n(n\leq10^5)\)的序列,序列中\(\large1\simn\)的每一个数都恰好出现两次。可进行两种操作:交换两个相邻的数的位置。......
  • 2023 香山杯 RE部分题解
      URL从哪里来 main函数断点下载这里 然后可以看到TempFileName,是out.exe.tmp,还包含路径,直接提取出来用IDA打开,一开始被url误导了,看到了下面的RC4加密去了,使用findcryt软件,看到一个base64加密,交叉引用 在这动态调试这个函数 里面的a1,有一串字符是base64密文 ,解......
  • 【ZROJ2730】简单题 可持久化分块题解
    Description给定一棵\(n\)个节点的树,每次询问编号为\([l,r]\)的点中有多少个是祖先关系。\(n,q\le10^5\)。Solution直接做的话树上的祖先关系不好统计,那么转化到\(\texttt{dfs}\)序上,如果\(u\)是\(v\)的祖先那么\(dfn_u\ledfn_v<dfn_u+siz_u\)。把\([d......
  • AtCoder Beginner Contest 324 DF题题解
    比赛链接D-SquarePermutation其实比较简单,但是比赛时候脑子不转了,竟然在尝试枚举全排列,然后算了一下复杂度直接不会做了。正解应该是枚举完全平方数,底数枚举到\(sqrt(10^{14})\)即可,因为n最大为13。然后统计一下这个完全平方数各个数字出现了多少个,和读入的比较一下是......