ABC384E题通过历程

news/2025/3/9 10:39:09/文章来源:https://www.cnblogs.com/grz0306/p/18611319

在赛时的时候,我们写出了一份非常牛逼的代码:

# include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 510;
int a[N][N];
int vis[N][N];
struct node {bool operator()(int a, int b) {return a > b;}
};
int dx[] = {0,1,-1,0};
int dy[] = {1,0,0,-1};
priority_queue<int,vector<int>,node> q;
signed main (){int h,w,x;scanf("%lld%lld%lld",&h,&w,&x);int p,y;scanf("%lld%lld",&p,&y);for(int i = 1;i <= h;i++){for(int j = 1;j <= w;j++){scanf("%lld",&a[i][j]);}}
//	q.push(1);
//	q.push(2);
//	cout << q.top() << endl;int res = a[p][y];vis[p][y] = 1;
//	q.push(res);queue<pair<int,int> > bfs;bfs.push({p,y});while(!bfs.empty()){int nowx = bfs.front().first;int nowy = bfs.front().second;bfs.pop();for(int i = 0;i < 4;i++){int now2x = nowx+dx[i];int now2y = nowy+dy[i];if(now2x < 1 || now2x > h || now2y < 1 || now2y > w || vis[now2x][now2y] == 1) continue;else{q.push(a[now2x][now2y]);}}
//		cout << res << endl;while(true && !q.empty()){if(q.top()*x < res){res += q.top();for(int i = 0;i < 4;i++){int now2x = nowx+dx[i];int now2y = nowy+dy[i];if(a[now2x][now2y] == q.top()){
//						cout << now2x << " " << now2y << endl;bfs.push({now2x,now2y});vis[now2x][now2y] = 1;}}q.pop();}else break;}}cout << res << endl;return 0;
} 

如果你仔细研究这个题目,就会发现这个代码存在manymany的错误,首先是在下面查找位置的时候没有判断边界,况且这个判断方式也不够正确,对于一个位置周边存在多个相同且满足a[now2x][now2y] == q.top()时,哪一个时我们的来时路呢?所以,我们积累经验,在传入优先队列的时候就把这个点的位置存进去,也就是这么钦定优先队列:

typedef pair<int, int> PII;
typedef pair<int, PII> PLI;
priority_queue<PLI, vector<PLI>, greater<PLI> > q;

然后传入的时候这么写:

q.push({a[now2x][now2y],{now2x,now2y}});

同时啊,我们考虑对于打标记这里,在实现方面,我们发现优先队列有可能不是清空的,后面有可能还要用到,那么不如直接就在传入队列的时候就打上标记,然后后面直接用就好了,也就是这样:

          for(int i = 0;i < 4;i++){ int now2x = nowx+dx[i];int now2y = nowy+dy[i];
//			if(now2x == 2 && now2y == 4)
//				cout << now2x << " " << now2y << endl;if(now2x < 1 || now2x > h || now2y < 1 || now2y > w || vis[now2x][now2y]) continue;else{q.push({a[now2x][now2y],{now2x,now2y}});vis[now2x][now2y]++;}}
//		cout << res << endl;while(!q.empty()){if(q.top().first*x < res){res += q.top().first;int now2x = q.top().second.first;int now2y = q.top().second.second;bfs.push({now2x,now2y});q.pop();				 }else break;}

最后,我们为了避免精度误差,所以采用了\(*x\)的做法,要注意到这个题目的\(s_{i,j} \times x\)会达到\(10^{21}\),所以,记得__int128!!!!,那么我们就得到了完整的AC代码:

code

向lzq学长致谢!!!
百年奋斗史:

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

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

相关文章

java学习12.16

springboot+vue3前后端分离的新技术的大部分写项目时的明显bug已经找到问题并纠正,可以赶上旧技术的进度了。再写几个项目就能在速度上超越旧的技术。

11CSS属性-颜色表示-chrome调试-浏览器渲染

一、今日内容 首先对这些属性进行一个演练 想要深刻理解所有常用的CSS属性,最好先学会以下几个最基础最常用的CSS属性font-size 文字大小 color前景色(文字颜色) background-color背景色 width宽度 height高度二、对CSS常用属性进行演练 1、字体的默认大小是16px的还可以看到…

使用win10 wsl子系统将 rust 程序静态编译为linux可执行文件

chapter Ⅰ 事情起因 最近在学习rust, 想把一部分java服务迁移至rust编写,但由于公司服务器都是linux系统,所以在找windows下交叉编译为linux可执行文件的方法,把bing首页搜索的结果试了个遍都不行, 始终报错“musl-gcc”无法找到,搜遍全网都无法解决。 最终在我不断尝试的…

Spring Cloud 负载均衡配置 (@LoadBalanced)

一、负载均衡 目前是两种 Ribbon 和 spring-cloud-loadbalancer - Ribbon已经闭源 配置策略较多 :轮询,随机,权重,自定义 四种负载均衡方案 配置方式yml 注解- spring-cloud-loadbalancer属于springcloud,项目兼容性更好 配置策略: 更注重 自定义(默认为轮询) 配置方式注…

架构信息收集

引子:一个Web应用的构成,由诸多组件&服务相结合,而域名仅是处于Web架构中最表层的一部分。本篇则由表及里,依次对整个Web应用架构,所需收集的信息类型、收集方式等进行介绍。附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.2 架构…

x86指令集 字节大小

x86指令集 字节大小 https://bbs.kanxue.com/thread-190127.htm 最近对x86_32架构下的许多程序进行了指令长度统计,结果表明所有程序所涉及的指令长度范围均为:1~11字节。而根据INTEL 开发者手册上介绍的指令的最大长度限制为15字节。但是,在什么情况或者架构上才会有12~15字…

实际项目中不一样的《桥接模式》

图片缩略图功能 需要对图片生产缩略图,压缩并保存到不同的介质中。输入端可能是本地图片,也可能是网络图片。保存的位置可能是本地,也有可能是第三方的minio、阿里云oss、七牛云oss。并且这些途径可能随时扩展。为了设计的灵活性,这里就要把输入可输出抽象出来,应用层通过…

一款渗透测试信息收集集成工具--mitan密探

本工具仅供安全测试人员运用于授权测试, 禁止用于未授权测试, 违者责任自负。作者及本公众号相关负责人不对您使用该工具所产生的任何后果负任何法律责任,在扫描模块使用多线程,在测试过程中根据目标的实际情况进行调整,切勿进行大线程低延时的大规模快速扫描,以免对目标服务…

最大网络流基本概念

1. 基本概念 1.1 流网络,不考虑反向边如果存在反向边也没事,不如有u->v和v->u两条边,那么就可以新加入一个点 p,u->v,v->p,p->u,转化为这三条边 1.2 可行流,不考虑反向边 1.2.1 两个条件:容量限制、流量守恒 容量限制:每条边流的不能超过这条边的权值 流量守…

sqli-labs

sqli-labs Less-1 基于错误的GET单引号字符型注入 index.php分析error_reporting(0); 不反馈错误 isset($_GET[id]) 检查($ _GET[id])参数是否设置 LIMIT 0,1 从第一条开始记录,只取一条记录1.推测闭合方式?id=1\输入\ ,后面是 ,推测是单引号闭合 输入 ?id=1 报错 输入 ?…

一文读懂:AI创业和投融资领域常见专有名词缩写详解

=== 预计悦读时间:3分钟 | 📚字数:约1000字——知识满满,不虚此行!🤔为什么你需要这篇神器? 就像由算法推荐给各位好奇的同学一样,我也被这些术语所困扰,想象一下,你正沉浸在一场关于AI的精彩演讲或者播客中,突然,一个神秘的英文缩写从嘉宾口中飞出,像是外星语言般让你瞬…

Simplex Method (单纯形方法)

学习目标:在本节中,我们将学习使用\(\textbf{单纯形法}\)解决线性规划最大化问题:(In this section, we will learn to solve linear programming maximization problems using the Simplex Method:)识别并建立标准的最大化形式的线性规划 (Identify and set up a linear pr…