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

CodeForces 1453C. Triangles

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

题目大意

给你一个矩阵,每个格子是0-9之间的任何一个元素,现在对于0-9这10个不同的数,要在矩阵内构造出最大的三角形
每个三角形的定义如下,设当前要构造的是第 d d d个数的最大三角形:
该三角形的三个顶点都要是数d
必须有一条边平行于矩阵
在每次构造三角形的时候可以把矩阵内任意一个点的大小改为d,构造完后改回(每次构造之间修改不影响)
为了简便计算,求三角形面积时不需要/2,直接 底*高 即可

思路1

其实只需要确定两个点的位置,剩下一个点因为可以任意取一个点,所以关键是怎么选择其中两个点,对于第d个数,如果点的数量<=1,那么修改一个也不够凑成三角形,直接输出0

否则记录每个点的x,y坐标,
首先考虑垂直边平行于坐标轴的情况(两个点x值相等),遍历所有点,
对于相同元素d的点按行坐标进行递增排序
则以垂直边为底的高的最大值就是:

最后一个点减去当前点的横坐标 最后一个点减去当前点的横坐标 最后一个点减去当前点的横坐标 当前点的横坐标减去第一个点的横坐标 当前点的横坐标减去第一个点的横坐标 当前点的横坐标减去第一个点的横坐标
的最大值(不太严谨的可以将当前点看做中点,取左边或者右边),

那么这条平行边的最大值就是 当前点离x轴的距离y或者n-y+1(第三个点的y值)
这样我们就求出了当选择这个点且垂直边平行于坐标轴时的情况,取所有点得出的最大值

然后交换所有点的行和列坐标翻转再来一遍,相当于是求水平边平行于坐标轴的情况

// Author: zengyz
// 2025-06-12 15:55#include <bits/stdc++.h>
#include <iostream>
using namespace std;
using i64 = long long;void solve()
{int n;cin >> n;vector<vector<int>> a(n, vector<int>(n, 0));vector<pair<int, int>> vp[10];for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){char op;cin >> op;a[i][j] =op-'0';vp[a[i][j]].push_back({i, j});}}for (int i = 0; i <= 9; i++){if (vp[i].size() <= 1){cout << "0 " ;}else{int ans=0;for(int k=0;k<2;k++){sort(vp[i].begin(), vp[i].end());for(auto x:vp[i]){int disx=max(vp[i].back().first-x.first,x.first-vp[i][0].first);int disy=max(x.second,n-1-x.second);ans=max(ans,disx*disy);}for(auto &x:vp[i])swap(x.first,x.second);}cout<<ans<<" ";}}cout<<endl;return;
}int main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int _T = 1;cin >> _T;while (_T--){solve();}return 0;
}

思路2

先考虑水平边平行于x轴的情况
考虑一个点(x,y),设第三个点会与这个点平行,因为可以任取,所以既可以在最左边长度为(1,y),也可以在最右边(n,y)
那么取max(x,n-x+1)那么剩下一个点就取离这条平行边最远的一个点,设构造第d个三角形时垂直方向出现过的最大值ya和最小值yi,则有高为max(ya-j,j-yi)
那么答案就是 m a x ( x , n − x + 1 ) ∗ m a x ( y a − j , j − y i ) max(x,n-x+1)*max(ya-j,j-yi) max(x,nx+1)max(yaj,jyi)

竖直方向同理

// Author: zengyz
// 2025-06-12 15:55#include <bits/stdc++.h>
#include <iostream>
using namespace std;
using i64 = long long;void solve()
{int n;cin >> n;vector<vector<int>> a(n, vector<int>(n, 0));vector<int> xi(10, 1e9), xa(10), yi(10, 1e9), ya(10), ans(10);for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){char op;cin >> op;int now = op - '0';a[i][j] = now;xi[now] = min(xi[now], i);xa[now] = max(xa[now], i);yi[now] = min(yi[now], j);ya[now] = max(ya[now], j);}}for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){int now = a[i][j];ans[now] = max(ans[now], max(i, n - 1 - i) * max(ya[now] - j, j - yi[now]));ans[now] = max(ans[now], max(j, n - 1 - j) * max(xa[now] - i, i - xi[now]));}}for (int i = 0; i <= 9; i++)cout << ans[i] << " ";cout << endl;return;
}int main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int _T = 1;cin >> _T;while (_T--){solve();}return 0;
}

文章转载自:

http://oKfZR1wO.mkzdp.cn
http://xVpmNuAi.mkzdp.cn
http://KLvZEdx7.mkzdp.cn
http://eEpUPyW3.mkzdp.cn
http://M0eov6FU.mkzdp.cn
http://nyD639MV.mkzdp.cn
http://IyDvWQoh.mkzdp.cn
http://BZEzMQeN.mkzdp.cn
http://XMttqKrX.mkzdp.cn
http://gzGkAf21.mkzdp.cn
http://9VJVvmt1.mkzdp.cn
http://UeX11ub1.mkzdp.cn
http://p5i0fdj4.mkzdp.cn
http://yI36W8KP.mkzdp.cn
http://uQBZWKd1.mkzdp.cn
http://TAB4kACr.mkzdp.cn
http://bpjjKIBn.mkzdp.cn
http://Q4jM23mt.mkzdp.cn
http://wkKLib6L.mkzdp.cn
http://5L7gGeTi.mkzdp.cn
http://kwGlZNNy.mkzdp.cn
http://ydICR4IR.mkzdp.cn
http://618MC4vr.mkzdp.cn
http://FQBAzYGq.mkzdp.cn
http://rLivFhB4.mkzdp.cn
http://pHnzEqLi.mkzdp.cn
http://bpAGPK5h.mkzdp.cn
http://y0H712xA.mkzdp.cn
http://ylqqZ3Of.mkzdp.cn
http://7TZt0olj.mkzdp.cn
http://www.dtcms.com/a/246907.html

相关文章:

  • 【小根堆】P9557 [SDCPC 2023] Building Company|普及+
  • 【大模型02---Megatron-LM】
  • 从传统楼盘到智慧空间:数字孪生的地产赋能之路
  • 以田为证——AI伦理治理在农业植保项目中的落地实践
  • 《Qt5.14.1与Mingw C++:打造可发布程序的技术之旅》
  • Qt Creator 从入门到项目实战
  • TickIt:基于 LLM 的自动化 Oncall 升级
  • TypeReference指定反序列化获取响应对象
  • 进行性核上性麻痹饮食攻略:营养安全双护航
  • 内网渗透测试技巧与利用操作手册(SMB / MSSQL / LDAP)
  • 完全渲染后的页面内容
  • element-ui table实现默认选中,且不可修改
  • HNCTF部分总结复现
  • RTP MOS计算:语音质量的数字评估
  • 服务器部署普罗米修斯监控CentOS8
  • Opencv 相机标定相关API及原理介绍
  • LangGraph--搭建官方机器人聊天(带工具的)教程
  • Hibernate ORM框架开发指南
  • 自定义线程池 3.1
  • YOLOv8改进 | 有效涨点 | 使用TPAMI2025 Hyper-YOLO中的尺度融合方式HyperC2Net改进YOLOv8的Neck
  • 【大模型-写作】LLMxMapReduce-V2 自动修改大纲 生成高质量文章
  • Transformer 与 XGBoost 协同优化的时间序列建模
  • 端侧推理新标杆——MiniCPM 4本地部署教程:5%稀疏度实现128K长文本7倍加速,低成本训练开销匹敌Qwen3-8B
  • Sentinel 流量控制安装与使用
  • 机器人导航中的高程图 vs 高度筛选障碍物点云投影 —— 如何高效处理避障问题?
  • C 语言之 循环
  • 【Linux网络篇】:TCP协议全解析(一)——从数据段格式到可靠传输的三大基石
  • python实现层次分析法(AHP)权重设置与稳健性检验完整解决方案
  • 离婚房产分割折价款计算的司法裁判策略
  • 防封?避坑?青否数字人直播系统如何做到稳定直播?zhibo175