zoukankan      html  css  js  c++  java
  • 洛谷 U138573 序章&第一章 黑暗时代(eviltime)

    洛谷 U138573 序章&第一章 黑暗时代(eviltime)

    洛谷传送门

    题目背景

    “博士,你醒了。”

    “抓住我的手”

    “你还能回忆起自己的名字吗”

    “不能吗……这样啊……”

    ![image-20201031083806861](file:///C:/%5CUsers%5CQYB%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20201031083806861.png)

    “欢迎回来,Dr.不能”

    “欢迎回来,Dr.qwq”

    题目描述

    游戏中,玩家扮演的是一个因故失忆的博士(刀客塔)。

    你被困在了敌人曾经的老巢——切尔诺伯格,而现在的任务则是逃出来,回到你属于的罗德岛

    切城的道路错综复杂,大体形成了一个网状的结构。

    每两条路的交叉点叫做一个节点,而所有的边交叉在一起便形成了一个 n * mnm矩阵

    而现在,在天灾的作用下,每秒钟都会有节点被摧毁。节点被摧毁后将会无法通行。

    为了更高效地撤离,随行的术士算出了每个节点将要被摧毁的时间。Amiya告诉你,你曾是泰拉世界在研究矿石病方面最权威的专家——你也曾多次带着自己的小队突破那一道道看似不可能突破的难关……

    而这一次,你能成功吗?

    输入格式

    第一行两个整数NN MM表示切城的道路大体上可以描述成一个NMNM*的矩阵

    接下来NN行,每行MM个整数,表示节点会在第a_{i,j}a**i,j分钟被摧毁

    特别地,若当前节点的值为0,则代表它早已被摧毁。

    输出格式

    一行,小队通过的最短时间。若无法通过,输出“N0”(不包含引号)。


    题解:

    SB题,SB人,超级SB出题人

    经典宽搜。

    坑点很多,包括但不完全是:

    N0而非No。

    代码:

    #include<cstdio>
    #include<queue>
    #define int long long
    using namespace std;
    char *p1,*p2,buf[100000];
    #define nc() getchar()
    int read()
    {
    	int x=0,f=1;
    	char ch=nc();
    	while(ch<48||ch>57)
    		if(ch=='-')
    			f=-1,ch=nc();
    	while(ch>=48&&ch<=57)
    		x=x*10+ch-48,ch=nc();
    	return x*f;
    }
    const int maxn=1e4+10;
    const int maxm=1010;
    int n,m;
    int a[maxn][maxm];
    bool vis[maxn][maxm];
    int dx[]={0,0,0,-1,1};
    int dy[]={0,1,-1,0,0};
    struct node
    {
    	int x,y,d;
    };
    queue<node> q;
    signed main()
    {
    	scanf("%lld%lld",&n,&m);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			scanf("%lld",&a[i][j]);
    	if(a[n][m]<=0)
    	{
    		puts("N0");
    		return 0;
    	}
    	node b;
    	b.x=n;b.y=m;b.d=0;vis[n][m]=1;
    	q.push(b);
    	while(!q.empty())
    	{
    		node u=q.front();
    		q.pop();
    		if(u.x==1 && u.y==1)
    		{
    			printf("%lld
    ",u.d);
    			return 0;
    		}
    		node v;
    		for(int i=1;i<=4;i++)
    		{
    			int xx=u.x+dx[i];
    			int yy=u.y+dy[i];
    			int dd=u.d+1;
    			if(xx<1 || yy<1 || xx>n || yy>m || vis[xx][yy] || dd>=a[xx][yy])
    				continue;
    			v.x=xx;
    			v.y=yy;
    			v.d=dd;
    			q.push(v);
    			vis[xx][yy]=1;
    		}
    	}
    	puts("N0");
    	return 0;
    }
    
  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13963907.html
Copyright © 2011-2022 走看看