NC14698 模拟战役
题目
题目描述
齐齐和司机在玩单机游戏《红色警戒IV》,现在他们的游戏地图被划分成一个n*m的方格地图。齐齐的基地在最上方的4行格内,司机的基地在最下方的4行格内。他们只有一种攻击方式:远程大炮,相关属性如下:
1、 大炮可以打到地图的任意一个位置。
2、 双方每次必须动用本方的一门大炮攻击,齐齐先手,双方交替进行攻击。
3、 一方大炮只能攻击另一方大炮,不能攻击本方或强制攻击未获得视野的地区。
4、 被一方大炮击中的另一方大炮会产生以攻击点为中心的3*3的波及区域,波及区域内如果有其他大炮则也会产生3*3的波及区域。
5、 两方的基地相距很远,所以不存在攻打敌方大炮时波及到本方大炮的情况。
齐齐偷偷开了“间谍卫星”,所以他能看到司机的大炮部署,司机则无视野。但如果齐齐做出攻击,司机会立即获取到发动攻击的大炮的视野,并在回合开始时动用大炮(如果存在的话)将其摧毁(摧毁后可能产生的连锁不计入视野)。
现在给出齐齐和司机的大炮部署,问齐齐在选择最优的策略下,在摧毁所有司机的大炮后可以保留最多几门本方大炮。
输入描述
第1行输入一个整数m,表示地图的宽度。
第2-5行,每行输入一串长度为m的字符串,代表司机的大炮部署。(大炮为"*"号,空地为“.”号)
第6-9行,每行输入一串长度为m的字符串,代表齐齐的大炮部署。(大炮为"*"号,空地为“.”号)
数据保证:0<m≤100
输出描述
输出一行,一个整数。代表摧毁所有司机的大炮后最多保留几门大炮。如果不能摧毁所有司机的大炮,则输出-1。
示例1
输入
3
...
.*.
..*
*..
*..
.**
...
*.*
输出
4
示例2
输入
3
*..
..*
...
...
...
...
.*.
...
输出
-1
题解
知识点:DFS。
遍历整张图,对每个点dfs访问连通点并标记,最后返回各个连通块的大炮个数(实际上对于司机只需要连通块个数即可)。然如果齐齐连通块个数小于司机的就不能完全摧毁,否则将齐齐的连通块按大炮个数从大到小排,取能保留块个数的和。
时间复杂度 \(O(m)\)
空间复杂度 \(O(m)\)
代码
#include <bits/stdc++.h>
using namespace std;
int m;
char dt[10][107];
const int dir[8][2] = { {1,1},{1,0},{1,-1},{0,1},{0,-1},{-1,1},{-1,0},{-1,-1} };
int dfs(int x, int y, int r) {
int ans = 1;
for (int i = 0;i < 8;i++) {
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if (nx >= r + 4 || nx < r || ny < 0 || ny >= m || dt[nx][ny] == '.') continue;
dt[nx][ny] = '.';
ans += dfs(nx, ny, r);
}
return ans;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> m;
for (int i = 0;i < 8;i++)
for (int j = 0;j < m;j++)
cin >> dt[i][j];
int sj = 0;
vector<int> qq;
for (int i = 0;i < 4;i++)
for (int j = 0;j < m;j++)
if (dt[i][j] == '*') {
dt[i][j] = '.';
dfs(i, j, 0);
sj++;
}
for (int i = 4;i < 8;i++) {
for (int j = 0;j < m;j++) {
if (dt[i][j] == '*') {
dt[i][j] = '.';
qq.push_back(dfs(i, j, 4));
}
}
}
if (qq.size() < sj) cout << -1 << '\n';
else {
sort(qq.begin(), qq.end(), [&](int a, int b) {return a > b;});
int ans = 0;
for (int i = 0;i < qq.size() - sj + 1;i++) ans += qq[i];
cout << ans << '\n';
}
return 0;
}
NC14698 模拟战役的更多相关文章
- NYOJ 228 士兵杀敌(五) (模拟)
{题目链接](http://acm.nyist.net/JudgeOnline/problem.php?pid=228) 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候 ...
- JZOJ 3487. 【NOIP2013模拟联考11】剑与魔法(dragons)
3487. [NOIP2013模拟联考11]剑与魔法(dragons) (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB De ...
- 【转帖】处理器史话 | 服务器CPU市场的战役, AMD、Intel和ARM的厮杀
处理器史话 | 服务器CPU市场的战役, AMD.Intel和ARM的厮杀 https://www.eefocus.com/mcu-dsp/377300 说完了个性鲜明的消费类电子,接下来聊一聊通 ...
- App开发:模拟服务器数据接口 - MockApi
为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- HTML 事件(四) 模拟事件操作
本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4. ...
- 模拟AngularJS之依赖注入
一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ...
- webapp应用--模拟电子书翻页效果
前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...
- javascript动画系列第一篇——模拟拖拽
× 目录 [1]原理介绍 [2]代码实现 [3]代码优化[4]拖拽冲突[5]IE兼容 前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容 ...
随机推荐
- 一文搞清楚Java中的方法、常量、变量、参数
写在开头 在上一篇文章:一文搞清楚Java中的包.类.接口 中我们讲了Java中的包.类和接口,今天继续将剩下的方法.常量.变量以及参数梳理完. Java中的变量与常量 在JVM的运转中,承载的是数据 ...
- 使用WTM框架创建博客系统后台并在云服务器发布
阅读导航 关于lqclass.com 博客后台前后端部署 2.1 已部署访问链接 2.2 nginx 部署 2.2.1 后台后端发布 2.2.2 后台前端发布 2.2.3 云服务器部署 下次分享 1. ...
- 【MicroPython】生成Q(string)符号表文件 - py\makeqstrdefs.py
脚本使用格式 python py/makeqstrdefs.py [command] [mode] [input-file] [output-directory] [output-file] comm ...
- 2023强网拟态crypto-一眼看出
1.题目信息 一眼看穿 查看代码 from Crypto.Util.number import * from secret import flag import gmpy2 flag=b'' r = ...
- [转帖]TiDB 数据库核心原理与架构 [TiDB v6](101)笔记
https://www.jianshu.com/p/01e49a93f671 description: "本课程专为将在工作中使用 TiDB 数据库的开发人员.DBA 和架构师设计. 本门课 ...
- [转帖]Ceph简单搭建
https://cloud.tencent.com/developer/article/1643322 Ceph基础介绍 Ceph是一个可靠地.自动重均衡.自动恢复的分布式存储系统,根据场景划分可 ...
- [转帖]Intel“革命性”X86s架构,带来哪些颠覆及影响?
https://www.eet-china.com/mp/a221822.html 英特尔发布了一份新的白皮书(Intel X86-S扩展架构规格),计划简化其处理器指令集架构(ISA).英特尔提供了 ...
- MySQL批量执行SQL修改视图属主的办法
前人挖坑 后人填坑 Study From https://blog.csdn.net/carefree2005/article/details/109812943 第一步: 形成SQL select ...
- 使用 Taro 开发鸿蒙原生应用 —— 探秘适配鸿蒙 ArkTS 的工作原理
背景 在上一篇文章中,我们已经了解到华为即将发布的鸿蒙操作系统纯血版本--鸿蒙 Next,以及各个互联网厂商开展鸿蒙应用开发的消息.其中,Taro作为一个重要的前端开发框架,也积极适配鸿蒙的新一代语言 ...
- javaScript随机图片
<script type="text/javascript"> //<!CDATA[ var pic = []; pic[0] = "链接"; ...