当前位置: 首页 > news >正文

备战 清华大学 上机编程考试-冲刺前50%,倒数第3天

T1:水滴 - 模拟

这是一个经典的游戏。

在一个 𝑛×𝑚 的棋盘上,每一个格子中都有一些水滴。

玩家的操作是,在一个格子中加一滴水。

当一个格子中的水滴数超过了 4,这一大滴水就会因格子承载不住而向外扩散。扩散的规则是这样的:

这个格子中的水滴会消失,然后分别向上、左、下、右 4 个方向发射一个水滴。如果水滴碰到一个有水的格子,就会进入这个格子。否则水滴会继续移动直到到达棋盘边界后消失。扩散后,水滴进入新的格子可能导致该格子的水滴数也超过 4 ,则会立即引发这个格子的扩散。我们规定,每个格子按逆时针顺序从上方向开始,递归处理完每一个方向的扩散以及其引发的连锁反应,再处理下一个方向的扩散。

给定棋盘的初始状态和玩家的操作,求最后水滴的分布情况。

由于把水滴在一个空格看起来用处不大,所以保证所有的玩家操作都不会选择空格。

提示:可以记录每个水滴上下左右方向第一个水滴的位置,扩散时根据规则模拟,并在每次操作后维护。

输入格式:

从标准输入读入数据。

第一行四个整数 𝑛,𝑚,𝑐,𝑇。

接下来 𝑐 行,每行三个正整数 𝑥𝑖,𝑦𝑖,𝑎𝑖,表示初始棋盘上第 𝑥𝑖 行 𝑦𝑖 列有 𝑎𝑖 个水滴。

接下来 𝑇 行,每行两个正整数 𝑢𝑖,𝑣𝑖,表示在第 𝑢𝑖 行 𝑣𝑖 列放入一个水滴。

输出格式:

输出到标准输出。

输出 𝑇 加若干行。

前 𝑇 行每行一个整数,第 𝑖 行表示在第 𝑖 次操作后扩散的水滴数。若没有扩散输出 0。

最后若干行(可能是 0 行)表示棋盘上水滴的分布情况。由上至下,由左至右输出,每行三个正整数表示行号、列号、水滴数。

解:

关键是模拟,模拟选择好 对应的 数据结构 + 合理的状态设置、记录 + 递归涉及(递归的前后次序) + if判断情况考虑全面:

code:

//水滴:大模拟
//似乎又是模拟问题, 我觉得那个老哥的经验贴说得对!-就是模拟 + 搜索 + 动态规划
//dfs ,bfs 深度优先 和 广搜 ——>记得用leetcode复习!#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#include<string>using namespace std;//虽然有点大,不过似乎可以用 vector<vector<int> > vec(n,vector(m,0))
int n,m,c,T;int mycount; //记录一次 滴水 发生的 扩散的次数//感觉不难,主要是如何记录,直接递归大模拟搞定:
vector<vector<int> > vec;
vector<vector<int> > flag; //记录状态0-4void init()
{//处理输入:cin>>n>>m>>c>>T;vector<vector<int> > vec2(n+1,vector<int>(m+1,0));  //下标从1开始用vec = vec2;    //记录全局水滴数flag = vec2;   //记录全局状态while(c--){int num1,num2,num3;cin>>num1>>num2>>num3;vec[num1][num2] = num3;      }
}void func(int x, int y , int destination)  //在(x,y)位置 滴水1次
{//另外一个出口 —— 出界:if(x < 1 || x > n || y < 1 || y > m){return ; //出界了,不管了}if(vec[x][y] == 0 || flag[x][y] != 0)  //没水,或者就是扩散状态{//进入这里,只可能是扩散递归的情况://不坐停留,直接调用 下一层 递归 并且 return//似乎还要一个方向参数:if(destination == 1){func(x-1,y,1);}else if(destination == 2){func(x,y-1,2);}else if(destination == 3){func(x+1,y,3);}else if(destination == 4){func(x,y+1,4);}return ;}vec[x][y] +=1;    //此处原来至少1滴水if(vec[x][y] > 4){//发生扩散:mycount++;//设置状态flag[x][y] = 1; //并且进行依次 2 ,3 ,4 ,0 状态,递归://递归出口就是 最后的状态0vec[x][y] = 0;flag[x][y] = 1; //进入 UP状态func(x-1,y,1);    //递归,上面那个+1//--递归退出:flag[x][y] = 2; //进入 Left状态func(x,y-1,2);//--递归退出:flag[x][y] = 3; //进入Down状态func(x+1,y,3);   //--递归退出:flag[x][y] = 4; //进入Right状态func(x,y+1,4);//--递归退出:flag[x][y] = 0 ; //恢复平静}
}//有一点一定要注意,那就是,只要这个vec[x][y] ==0 
//只要第一次 没有水滴, 或者 之后这个位置发送了 1次 扩散
//那么, 之后 这个位置就不可能再有水滴!!!! -- 可以优化地方int main()
{init();////进行T次滴水,调用T次-递归函数funcwhile(T--){//滴水一次!mycount = 0; //归零int num1,num2;cin>>num1>>num2;func(num1,num2,1);//进行输出 -- 总共有地方 水滴 > 4cout<<mycount<<endl;}//最终的输出:for(int i = 1 ;i <= n;i++){for(int j  = 1; j<=m ;j++){if(vec[i][j] != 0 ){cout<<i<<" "<<j<<" "<<vec[i][j]<<endl;}}}return 0;
}

相关文章:

备战 清华大学 上机编程考试-冲刺前50%,倒数第3天

T1:水滴 - 模拟 这是一个经典的游戏。 在一个 &#x1d45b;&#x1d45a; 的棋盘上&#xff0c;每一个格子中都有一些水滴。 玩家的操作是&#xff0c;在一个格子中加一滴水。 当一个格子中的水滴数超过了 4&#xff0c;这一大滴水就会因格子承载不住而向外扩散。扩散的规…...

docker的安装及docker常用命令

目录 环境介绍docker卸载docker安装docker镜像命令查看docker可用的镜像查看docker可安装的镜像安装镜像删除镜像 docker容器命令查看容器启动容器启动示例进入容器内部停止容器删除容器容器和主机之间的文件复制 docker网络命令创建docker网络查看docker网络删除docker网络 do…...

Dell服务器根据GPU温度调整风扇转速

前言 dell服务器自动风扇是根据CPU温度来调速的&#xff0c;我跑AI的时候cpu温度不高但是GPU温度很高导致显卡卡死PVE虚拟机直接挂起无法运行&#xff0c;我看了下也没有基于显卡温度调速的脚本&#xff0c;于是我就自己写了一个 基于ipmi工具 乌班图等linux先安装ipmi apt …...

快捷键专栏 IDEA、Navicat、电脑、Excle、Word等

标题 电脑篇windowsR 配合以下常用命令连上公司网线WiFi速度变慢问题解决Windows10 设置鼠标右键在此处打开cmd和Powershell窗口、关机打开电脑诊断工具系统设置常用设置查看电脑出场日期 systeminfo删除文件显示已在另一个程序打开&#xff1f;找回回收站删除的文件WindowsR输…...

卸载MySQL5.0,安装MySQL8.0

卸载MySQL 1、以管理员身份运行cmd,删除MySQL服务 2、卸载MySQL 3、删除残余文件 4、清楚注册表 winR -> regedit 5、删除环境变量 安装MySQL步骤 官方下载地址 https://www.mysql.com/downloads/ 以上步骤即完成MySQL数据库安装。...

苹果WWDC重磅发布的IOS 18、Apple Intelligence背后的技术分析!

2024年6月10日&#xff0c;在2024年WWDC全球开发者大会上&#xff0c;苹果推出了Apple Intelligence&#xff0c;这是深度集成到iOS 18、iPadOS 18和macOS Sequoia中的个人智能系统。 为了让大模型能在 iPhone 端侧跑&#xff0c;苹果还是做了很多事情的。接下来就跟大家介绍一…...

Linux基础IO【II】

今天&#xff0c;我们接着在上一篇文章的基础上&#xff0c;继续学习基础IO。观看本文章之前&#xff0c;建议先看&#xff1a;Linux基础IO【I】&#xff0c;那&#xff0c;我们就开始吧&#xff01; 一.文件描述符 1.重新理解文件 文件操作的本质&#xff1a;进程和被打开文件…...

DevExpress学习系列文章

一&#xff1a;DevExpress Installed 二&#xff1a;Application UI 三&#xff1a;Data Management Controls 四&#xff1a;Skins 五&#xff1a;DevExpress 控件和库 系列文章相关代码&#xff1a;DevExpressDemo: DevExpress学习过程中的Demo...

在大数据时代:为何硬盘仍是数据中心存储的核心

在云计算和人工智能应用场景不断涌现的时代背景下&#xff0c;数据集的价值急剧上升&#xff0c;硬盘对于数据中心运营商来说变得比以往任何时候都更为关键。硬盘存储了全球大部分的艾字节&#xff08;EB&#xff09;数据&#xff0c;行业分析师预计&#xff0c;在艾字节持续增…...

安装TrinityCore NPCBot(尝试中)

安装TrinityCore NPCBot 基本安装方法 Follow TrinityCore Installation Guide (https://TrinityCore.info/) to install the server firstDownload NPCBots.patch and put it into your TrinityCore folderApply the patch using patch -p1 < NPCBots.patch command (crea…...

Java SE LTS版本商用收费,有那些开源的替代方案?

&#x1f680; Java SE LTS版本商用收费&#xff0c;有那些开源的替代方案&#xff1f; 摘要 Java 对于云服务、大数据、电子商务、支付、欺诈和身份、交易等许多应用程序来说都是至关重要的语言。然而&#xff0c;Oracle 对 Java SE LTS 版本的商用收费政策引发了广泛关注和…...

Win系统 锁屏自动暂停音乐

Windows 的系统锁屏功能可以让我们在离开电脑前时保护我们的系统安全&#xff0c;而如果你正在播放音乐的话&#xff0c;锁屏开启后默认是继续播放的。 这就导致在公共场合下别人很容易能够通过你的电脑屏幕看到你在听什么&#xff0c;这里介绍一种通过 AutoHotkey 实现锁屏自动…...

ffmpeg实现视频播放 ----------- Javacv

什么是Javacv和FFmpeg&#xff1f; Javacv是一个专门为Java开发人员提供的计算机视觉库&#xff0c;它基于FFmpeg和Opencv库&#xff0c;提供了许多用于处理图 像、视频和音频的功能。FFmpeg是一个开源的音视频处理工具集&#xff0c;它提供了用于编码、解码、转换和播放音视频…...

解决更新Android Studio后下载Gradle超时

随着Android Studio的更新&#xff0c;所需要的最低Gradle版本也在变化&#xff0c;这时候构建项目的时候就需要先下载所需的Gradle发行版。对于Gradle构建项目&#xff0c;我们已经知道项目使用的Gradle是在根项目的gradle/wrapper/gradle-wrapper.properties文件中定义的&…...

智能合约漏洞类型

Are We There Yet? Unraveling the State-of-the-Art Smart Contract Fuzzers | Proceedings of the IEEE/ACM 46th International Conference on Software Engineering...

6.7.31 使用端到端训练的基于 EfficientNet 的卷积网络在双视图乳房 X 线摄影中进行乳腺癌诊断

最好的技术之一进行了两次迁移学习:第一种是使用在自然图像上训练的模型来创建“块分类器”,对子图像进行分类;第二种是使用块分类器扫描整个乳房 X 光检查并创建“单视图全图像分类器”。建议进行第三次迁移学习,以获得一个“双视图分类器”,以使用两个乳房 X 光检查视图…...

访问方法(反射)

文章目录 前言一、访问成员方法的方法二、Method类 1.常用方法2.实操展示总结 前言 为了实现在某类中随时可以调用其他类的方法&#xff0c;java.lang.reflect包中提供了Method方法类来实现该效果。每一个Method对象代表着一个方法&#xff0c;利用Methoc对象可以操纵相应的方法…...

探索Excel的隐藏功能:如何求和以zzz开头的列

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 步骤一&#xff1a;定位"zzz"开头的列 需要找到所有以"zzz"开头的列。在Excel中&#xff0c;你可以通过以下几种方法来实现&#xff1a; 手动查找&#xff1a;滚动查看列标题&#xff0c;找到…...

git:切换到指定的commit

背景 今天合并人家代码的时候&#xff0c;报冲突了&#xff0c;然后解决完冲突以后&#xff0c;发现有个冲突干错了&#xff0c;但是都已经commit了&#xff0c;所以我就想那就回到这次merge之前的我的分支的commit 解决过程 取消合并 我先查了能否直接取消合并&#xff0c…...

js之事件监听以及相关案例

这里写目录标题 一级目录二级目录三级目录 Web APIs02一、事件监听1.定义2.调用语法3.事件监听三要素4.事件监听版本 二、事件类型随机点名之事件监听版本案例要求大致思路先获取dom对象理解程序运行 完整代码 一级目录 二级目录 三级目录 Web APIs02 一、事件监听 1.定义…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...