第四届上海理工大学程序设计全国挑战赛---昨日方舟

知识点:模拟
 

题目描述

《昨日方舟》是一款塔防类游戏。在游戏中,我们要通过部署角色来抵御怪物的入侵。在这款游戏中,有一名角色名字为 “今”,他的能力为能够在地图上部署小蛇,小蛇在某些条件下可以与其他小蛇合体,成为大蛇,大蛇不能再与其他小蛇或大蛇合成。

现在有一个大小为 nnn 行 mmm 列的地图,自上往下分别为第 111 行……第 nnn 行,自左往右为第 111 列……第 mmm 列。格子分为可部署格和不可部署格。小蛇只能部署在可部署格上,并且小蛇在部署时,会有一个确定的朝向。

大蛇的合成规则如下:

1. 若当前部署的小蛇所面向的相邻格子中存在另一条小蛇,则当前部署的小蛇消失,面向的小蛇变成大蛇,朝向不变(与原来的小蛇一致)。
2. 若 1 中情况不满足,但存在已经部署的其他小蛇面向当前部署的格子,且与当前部署的格子相邻,那么这些小蛇中最后一条部署的小蛇消失,当前部署的小蛇变成大蛇,朝向与当前部署小蛇一致。
现在给定 n×mn \times mn×m 的地图的每个格子的可部署情况,以及无限只待部署的小蛇,初始状态下地图中不存在小蛇与大蛇,并且按照时间顺序给定 kkk 次尝试部署小蛇的位置和朝向(可能尝试部署在其他小蛇,大蛇和不可部署位置上,此时视作部署失败,不会发生任何事),请输出最后地图上的小蛇与大蛇的存在情况。

输入描述:

 

输入第 111 行包含 333 个用空格分隔的正整数 n,m,kn, m, kn,m,k ,代表地图的大小与尝试部署的次数。(1≤n,m≤103, 1≤k≤2×105)(1 \leq n,m \leq 10^3,\ 1 \leq k \leq 2\times 10 ^ 5 )(1≤n,m≤103, 1≤k≤2×105)

接下来 nnn 行每行有 mmm 个用空格分隔的整数,第 iii 行第 jjj 个整数代表了地图中第 iii 行第 jjj 列格子的可部署情况,“0” 代表不可部署格,“1” 代表可部署格子。

最后 kkk 行,每行包含 222 个整数 x, yx,\ yx, y 与一个字符 ccc ,第 iii 行表示按照时间顺序,第 iii 次尝试部署的小蛇位置为第 xxx 行第 yyy 列,且朝向为 ccc 。 (1≤x≤n, 1≤y≤m, c∈{u,d,l,r}1 \leq x \leq n,\ 1 \leq y \leq m,\ c \in \{u,d,l,r\}1≤x≤n, 1≤y≤m, c∈{u,d,l,r},u,d,l,ru, d, l, ru,d,l,r 分别代表朝向为上、下、左、右)。

输出描述:

输出 nnn 行,每行包含 mmm 个字符,第 iii 行第 jjj 列的字符 ccc 代表最终地图上第 iii 行第 jjj 列格子的状态。“X” 表示该格为不可部署区域,“O” 表示该格为可部署区域,但不存在小蛇与大蛇部署在该格,“u”, “d”, “l”, “r” 表示该格部署了小蛇,并且朝向为上、下、左、右,“U”, “D”, “L”, “R” 表示该格部署了大蛇,且朝向为上、下、左、右。

示例1

输入

复制2 2 4 1 1 1 1 1 1 r 1 2 l 2 1 l 2 2 r

2 2 4
1 1
1 1
1 1 r
1 2 l
2 1 l
2 2 r

输出

RO
lr

示例2

输入

3 9 12
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 1 1
1 2 d
2 1 r
3 2 u
2 2 r
1 5 d
2 4 r
3 5 u
2 5 d
1 8 d
2 7 r
3 8 u
2 8 r

输出

OdOOdOOdO
rROrOOrXO
OOOOUOOuO
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
char gz[1010][1010];
int dx[]={-1,1,0,0};//上下左右
int dy[]={0,0,-1,1};
int t[1010][1010];
struct ty{int x,y,t;  
};
bool cmp(ty a,ty b){return a.t>b.t;
}
int main(){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int a;cin>>a;if(a) gz[i][j]='O';else gz[i][j]='X';}}for(int i=1;i<=k;i++){int a,b;char c;cin>>a>>b>>c;if(gz[a][b]!='O') continue;t[a][b]=i;if(c=='u'){int x=dx[0]+a,y=dy[0]+b;if(gz[x][y]=='d'||gz[x][y]=='u'||gz[x][y]=='l'||gz[x][y]=='r') {if(gz[x][y]=='u') gz[x][y]='U';else if(gz[x][y]=='d') gz[x][y]='D';else if(gz[x][y]=='l') gz[x][y]='L';else if(gz[x][y]=='r') gz[x][y]='R';continue;}}else if(c=='d'){int x=dx[1]+a,y=dy[1]+b;if(gz[x][y]=='d'||gz[x][y]=='u'||gz[x][y]=='l'||gz[x][y]=='r') {if(gz[x][y]=='u') gz[x][y]='U';else if(gz[x][y]=='d') gz[x][y]='D';else if(gz[x][y]=='l') gz[x][y]='L';else if(gz[x][y]=='r') gz[x][y]='R';continue;}}else if(c=='l'){int x=dx[2]+a,y=dy[2]+b;//cout<<x<<" "<<y<<" "<<gz[x][y]<<endl;if(gz[x][y]=='d'||gz[x][y]=='u'||gz[x][y]=='l'||gz[x][y]=='r') {if(gz[x][y]=='u') gz[x][y]='U';else if(gz[x][y]=='d') gz[x][y]='D';else if(gz[x][y]=='l') gz[x][y]='L';else if(gz[x][y]=='r') gz[x][y]='R';continue;}}else if(c=='r'){int x=dx[3]+a,y=dy[3]+b;if(gz[x][y]=='d'||gz[x][y]=='u'||gz[x][y]=='l'||gz[x][y]=='r') {if(gz[x][y]=='u') gz[x][y]='U';else if(gz[x][y]=='d') gz[x][y]='D';else if(gz[x][y]=='l') gz[x][y]='L';else if(gz[x][y]=='r') gz[x][y]='R';continue;}}vector<ty> v;for(int j=0;j<4;j++){int x=a+dx[j];int y=b+dy[j];if(x>n||x<1||y>m||y<1) continue;if(j==0&&gz[x][y]=='d') v.push_back({x,y,t[x][y]});else if(j==1&&gz[x][y]=='u') v.push_back({x,y,t[x][y]});else if(j==2&&gz[x][y]=='r') v.push_back({x,y,t[x][y]});else if(j==3&&gz[x][y]=='l') v.push_back({x,y,t[x][y]});}if(v.size()==0){gz[a][b]=c;continue;}sort(v.begin(),v.end(),cmp);for(int j=0;j<v.size();j++){if(c=='u')gz[a][b]='U';else if(c=='d') gz[a][b]='D';else if(c=='r') gz[a][b]='R';else if(c=='l') gz[a][b]='L';gz[v[j].x][v[j].y]='O';break;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<gz[i][j];}cout<<endl;}
}

WA的原因:

1.dx和dy数组的上下和左右弄反了,好多次了!!!

2.排序排反了,是最晚放置的,我排成最早了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 IIS 开启匿名访问网站仍要账号密码登录网站的解决方法

欢迎关注公总号【云边小网安】 问题提出&#xff1a;发现虽然勾选了允许匿名访问网站&#xff0c;但在访问某一网站的时候仍然需要登录账号密码 解决方法一&#xff1a;登录管理员账号密码解决方法二&#xff1a;添加访问网站文件夹的用户 访问某一网站本质上来讲&#xff0…

C++入门必读-Qt的安装与配置

QT简介 Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 QT下载 访问下载网站: Index of /archive/qt 安装编译器 QT安装 建议安装之前将网络断…

1064 朋友数

solution 给出n个整数&#xff0c;统计可能的位数和&#xff0c;并按升序输出&#xff08;考虑用set实现&#xff09; #include<iostream> #include<set> using namespace std; int main(){set<int> st;int n, x, sum;scanf("%d", &n);while…

前端Vue架构

1 理解&#xff1a; 创建视图的函数&#xff08;render&#xff09;和数据之间的关联&#xff1b; 当数据发生变化的时候&#xff0c;希望render重新执行&#xff1b; 监听数据的读取和修改&#xff1b; defineProperty&#xff1a;监听范围比较窄&#xff0c;只能通过属性描…

Docker 直接运行一个 Alpine 镜像

由于镜像很小&#xff0c;下载时间往往很短&#xff0c;读者可以直接使用 docker run 指令直接运行一个 Alpine 容器&#xff0c;并指定运行的 Linux 指令&#xff0c;例如&#xff1a; PS C:\Users\yhu> docker run alpine echo 123 Unable to find image alpine:latest lo…

Commit failed (details follow):is out of date

Commit failed (details follow):is out of date 关于SVN提交时报out-of-date错误的解决方法 提交项目文件时&#xff0c;报如下的信息&#xff1a; Item is out-of-date svn: Commit failed (details follow): svn: Item ‘/xxx/xxx/xxx/xxx/xxx/xxx’ is out of date 原因&…

手写Spring5【笔记】

Spring5【笔记】 前言前言推荐Spring5【笔记】1介绍2手写 最后 前言 这是陈旧已久的草稿2022-12-01 23:32:59 这个是刷B站的时候&#xff0c;看到一个手写Spring的课程。 最后我自己好像运行不了&#xff0c;就没写。 现在2024-5-12 22:22:46&#xff0c;发布到[笔记]专栏中…

队列(详解)

一.队列的概念 队列&#xff08;Queue&#xff09;是一种常见的数据结构&#xff0c;它按照先进先出的原则管理数据。这意味着最先进入队列的元素将被最先移出队列&#xff0c;类似于现实生活中排队的场景。 在队列中&#xff0c;数据项被添加到队列的一端&#xff0c;称为队尾…

cmu15445 2023fall project3 详细过程(下)QUERY EXECUTION

QUERY EXECUTION task3/task4 Task #3 - HashJoin Executor and Optimization1、HashJoin1.1 思路1.2 代码 2 NestedLoopJoin优化为HashJoin2.1 思路2.2 代码 Task #4 Sort Limit Executors Top-N Optimization Window Functions1、Sort1.1 思路1.2 代码 2、Limit Executors2…

数据可视化第五天(读取文件获得男生女生身高信息,并且可视化在一个图像)

文件 需要学生文件的可以私信我 过程 利用numpy的loadtxt文件读取学号&#xff0c;性别&#xff0c;和身高。 import numpy as np import matplotlib.pyplot as pltfilename/Users/oommnn/Desktop/python学习/数据分析/网课资料/第04天/student-data.txtuser_infonp.dtype(…

文献阅读——LPPLS(2)

A study on the bursting point of Bitcoin based on the BSADF and LPPLS methods 文献来源[2] Yao, Can-Zhong, and Hong-Yu Li. “A study on the bursting point of Bitcoin based on the BSADF and LPPLS methods.” The North American Journal of Economics and Financ…

猫头虎分享已解决Bug || **Vue.js脚手架安装失败** Error: unable to fetch template`

猫头虎分享已解决Bug &#x1f42f; || Vue.js脚手架安装失败 &#x1f6ab;Error: unable to fetch template 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题…

CodeTop 高频笔试题总结(持续更新)

&#x1f3c6; 频率从高到低排序 &#x1f468;‍&#x1f3eb; 参考的频率数据&#xff1a;CodeTop &#x1f468;‍&#x1f3eb; 力扣hot100 无重复字符的最长子串 双指针 滑动窗口 哈希&#x1f468;‍&#x1f3eb; 力扣hot100 反转链表 指针 递归 一题多解&#x1f468;‍…

7. path路径绘制:使用path绘制曲线

曲线在SVG中通常是通过贝塞尔曲线命令来绘制的&#xff0c;包括二次贝塞尔曲线&#xff08;Q&#xff09;和三次贝塞尔曲线&#xff08;C&#xff09;。这些命令允许我们创建平滑的曲线路径。 贝塞尔曲线的原理 贝塞尔曲线的基本原理是通过控制点和锚点来定义一条曲线的形状。…

命名规范总结Java

小驼峰命名 主要用于变量和方法的命名&#xff0c;当标识符是一个单词时首字母小写&#xff0c;当标识符为多个单词时第一个单词首字母小写&#xff0c;其他单词首字母大写 大驼峰命名 主要用于类(Class)名等。标识符各个单词首字母大写。 全部大写命名 常量名 全部小写命…

持续总结中!2024年面试必问 100 道 Java基础面试题(四十一)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 100 道 Java基础面试题&#xff08;四十&#xff09;-CSDN博客 八十一、Java内存模型是什么&#xff1f; Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是Java虚拟机&#xff08;JVM&#xff09;…

海豚知道知识付费平台,大V都在用,新手也能做,网络营销是什么?如何向销售转化?

我国的市场营销已经全面步入互联网时代&#xff0c;教育行业也逐渐网络化&#xff0c;通过互联网发家壮大的机构比比皆是&#xff0c;然而仍旧有很多中小型教育培训机构&#xff0c;没有从事网络营销推广&#xff0c;或者从事了效果非常不理想。网络营销是什么&#xff0c;如何…

流畅的python-学习笔记_对象引用、可变性、垃圾回收

变量不是盒子 即变量是引用&#xff0c;而不是实际内存&#xff0c;多个标识赋值相同变量时&#xff0c;多余标识是引用 标识、相等性、别名 比较对象的值&#xff0c;is比较对象的id。实际调用对象的__eq__方法。is速度比快&#xff0c;因为is不能重载&#xff0c;省去了寻…

UNIT6,NFS网络文件系统的应用

实验要求&#xff1a; 1.配置2台服务器要求如下&#xff1a; a&#xff09;服务器1&#xff1a; 主机名&#xff1a;user-server.timinglee.org ip地址&#xff1a; 172.25.254.100 配置好软件仓库 b&#xff09;服务器2&#xff1a; 主机名&#xff1a;storage-server.timing…

力扣 300. 最长递增子序列 python AC

动态规划 dp[i]表示到当前位置为止最多个数的递增子序列 简单的对每个位置从头遍历 class Solution:def lengthOfLIS(self, nums):size len(nums)dp [1] * sizefor i in range(1, size):for j in range(i):if nums[i] > nums[j]:dp[i] max(dp[i], dp[j] 1)return max…