首页 > 其他分享 >穿越

穿越

时间:2024-05-14 21:29:50浏览次数:22  
标签:tx ty dp pos tm 穿越 se

题目描述

解析

纯搜索,注意不能用 \(dfs\) !!!

  1. 每次四个方向以及所有传送门,判断 \(rain\) 最早下的时间,判雨;

  2. 对于兽,如果醒了,等它着再走过去,需要判脚下兽,脚下雨,下一个点的雨。

code
#include<bits/stdc++.h>
#define se second
#define fi first
using namespace std;
const int N = 305;
int n,m,mp[N][N],a,b,dp[N][N],up[N][N],rain[N][N];
bool vs[N][N];
int cnt,ans=10000;
pair<int,int> csm[N*N];
vector<pair<int,int> > shou[N][N];
int xx[4]={-1,0,1,0},yy[4]={0,-1,0,1};
priority_queue<pair<int,pair<int,int> > > q; 

void dj()
{
	q.push({0,{1,1}});
	while(!q.empty())
	{
		pair<int,int> pos=q.top().se;
		int tm=dp[pos.fi][pos.se]; q.pop();		
		if(vs[pos.fi][pos.se]) continue;//dij
		vs[pos.fi][pos.se]=1;

		for(int i=0;i<4;i++)
		{
			int tx=pos.fi+xx[i],ty=pos.se+yy[i];
			if(tx<=0||tx>n||ty<=0||ty>m) continue;
			if(rain[tx][ty]<=tm+1||mp[tx][ty]==1) continue;//rain and wall 
			int tmp=tm;
			if(mp[tx][ty]==2)
			{
				for(pair<int,int> j:shou[tx][ty])//beasts:I will go
					if(j.fi<=tm+1&&j.se>=tm+1)
					{
						if(rain[pos.fi][pos.se]<=j.se||rain[tx][ty]<=j.se+1) tm=1e9;//rain:here and there
						if(mp[pos.fi][pos.se]==2)
							for(pair<int,int> h:shou[pos.fi][pos.se])//beasts:I am here
								if(h.fi<=j.se&&h.se>=j.se) tm=1e9;
						if(tm!=1e9) tm=max(tm,j.se);
					}			
			}
			if(dp[tx][ty]>tm+1)
			{
				dp[tx][ty]=tm+1;
				q.push({-dp[tx][ty],{tx,ty}});
			}
			tm=tmp;
		}
		if(mp[pos.fi][pos.se]==3)//gate
		{
			for(int i=1;i<=cnt;i++)
			{
				int tx=csm[i].fi,ty=csm[i].se;
				if(rain[tx][ty]<=tm+2) continue;//rain:I will go
				if(dp[tx][ty]>tm+2)
				{
					dp[tx][ty]=tm+2;
					q.push({-dp[tx][ty],{tx,ty}});	
				}
			}		
		}		
	}
}
int main()
{
	freopen("cross.in","r",stdin);
	freopen("cross.out","w",stdout);
	memset(dp,0x3f,sizeof(dp)); dp[1][1]=0;
	memset(rain,0x3f,sizeof rain);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&mp[i][j]);
			if(mp[i][j]==3) csm[++cnt]=make_pair(i,j);
		}
	}
	scanf("%d",&a);
	for(int i=1;i<=a;i++)
	{
		int t; scanf("%d",&t);
		int p; scanf("%d",&p);
		for(int j=1;j<=p;j++)
		{
			int x,y; scanf("%d%d",&x,&y);
			rain[x][y]=min(rain[x][y],t);
		}
	}
	scanf("%d",&b);
	for(int i=1;i<=b;i++)
	{
		int t1,t2;  scanf("%d%d",&t1,&t2);
		int x,y; scanf("%d%d",&x,&y);
		shou[x][y].push_back(make_pair(t1,t2));
	}
	dj();
	printf("%d\n",dp[n][m]);
	return 0;
}

注意

码力有待提升,赛时唐氏 \(dfs\) ,数据再水也得 \(\mathbb{T}\) 。

注意 \(dij\) 就是优先队列优化的 \(bfs\) ,贪心依然成立,搜索题也可以用。

标签:tx,ty,dp,pos,tm,穿越,se
From: https://www.cnblogs.com/ppllxx-9G/p/18192270

相关文章

  • P5465 [PKUSC2018] 星际穿越
    记录一下这道有意思的题目。因为我之前没做国旗计划……性质:如果当前走到了\(y<x\),那么一定可以使用同样的步数走到\(x\)。所以我们完全可以在从\(y\)走到\(y'\)的时候发现中间有一个点\(x\)更优,直接从\(y\)退到\(x\)即可。根据这个可撤销性,我们就得到了一个贪心......
  • 小组练习:如果你穿越到1993年,你如何帮助万燕公司?
    穿越到1993年,帮助万燕公司应该采取以下措施:技术升级和专利保护:帮助万燕公司加强对MPEG技术的理解和应用,尽早申请相关专利,保护技术成果,避免被其他公司仿制。这样可以确保公司在市场上的竞争优势。市场营销和品牌建设:制定有效的市场营销策略,提升万燕品牌知名度和美誉度。通过广告......
  • NEMU PA3 - 穿越时空的旅程: 批处理系统
    frompixiv最简单的操作系统最简单的操作系统有:批处理功能有一个后台程序,当一个前台程序执行结束的时候,后台程序就会自动加载一个新的前台程序来执行这样的一个后台程序,其实就是操作系统用户程序执行结束之后,可以跳转到操作系统的代码继续执行操作系统可以加载......
  • LibreOJ-3038 「JOISC 2019 Day3」穿越时空 Bitaro <线段树> 题解
    审题一条链每条边有通行时间上下界限制通过一条边需要\(1\)单位时间站在当前节点时间减少\(1\)耗费\(1\)单位代价\(q\)次询问要么更改一条边的通信时间上下界要么询问在\(b\)时刻在城市\(a\),\(d\)时刻到达城市\(c\)的最小代价思想做题准备......
  • 双开助手微分身版 支持微分身、QQ分身、陌陌分身、荣耀战区穿越等。
    无论是游戏还是各种APP均可以多开!!【软件名称】猴子分身【软件大小】49.39M【软件版本】5.0.5【软件名称】双开助手微分身版【软件大小】34.05M【软件版本】10.0.8【软件名称】双开应用【软件大小】17.68M【软件版本】2.4.4【软件名称】CloneApp【软件大小】9.72M......
  • 南桥杯之穿越雷区
    #include<stdio.h>#include<stdlib.h>#include<stdbool.h>charmap[101][101];intdir[4][2]={-1,0,1,0,0,-1,0,1};//某个点的四个方向boolvist[101][101]={false};//标记是否已访问intXa,Ya,Xb,Yb,N,ans;//记录A,B坐标和步数structnode{ intx,y......
  • Day51:WEB攻防-前后台功能点&文件下载&文件读取&文件删除&目录遍历&目录穿越
    目录文件安全-下载&读取&删除-案例黑白盒下载=读取文件删除目录安全-遍历&穿越-案例黑白盒目录遍历目录穿越知识点:1、文件安全-前后台功能点-下载&读取&删除2、目录安全-前后台功能点-目录遍历&目录穿越文件安全-下载&读取&删除-案例黑白盒1、下载=读取......
  • 穿越地心,开启矿洞隧道漫游可视化之旅
    在这个充满好奇与探索的时代,我们总是渴望揭开世界的神秘面纱,探寻那些深藏在地球内部的奥秘。 矿洞隧道漫游可视化系统通过先进的计算机图形学、虚拟现实和三维建模技术,将矿洞隧道的真实场景进行高精度还原,让我们仿佛置身于一个充满奇幻色彩的地心世界。在这里,我们可以穿越曲折......
  • 穿越时空的沉浸式体验:红色教育基地漫游可视化
    在快节奏的现代社会,人们对于教育和休闲的追求愈发多元化。红色教育基地作为历史的见证者,承担着传承革命精神、弘扬社会主义核心价值观的重要使命。然而,传统的参观方式往往过于单调,难以让参观者在短时间内深入理解革命历史的内涵。正是基于这样的背景,山海鲸可视化基于自研的3D渲染......
  • 穿越时空,探索地球奥秘:3D地理展览馆的独特魅力
    在浩瀚的数字世界中,你是否曾渴望探寻那未曾踏足的秘境,感受大自然的鬼斧神工,或是追溯那遥远的文明印记?现在,山海鲸可视化为你揭开了这一奇幻的探索之旅。 置身山海鲸的世界,就如同手握一把神奇的钥匙,打开了通往无数奇景的大门。不同于传统的地图或展览馆,使用山海鲸可视化搭建的3D......