news 2026/8/17 18:58:30

小红的马【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小红的马【牛客tracker 每日一题】

小红的马

时间限制:3秒 空间限制:1024M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小红在玩国际象棋。在一个无限大的棋盘上,有n nn个兵。小红想找一个没有兵占据行号与列号均为正整数的格子放置一个马,并使得马能攻击到的兵的数量最多。请你帮他找到任意一个满足该条件的位置。
马可攻击的八个位置如下图所示(注意,您无需考虑中国象棋中的蹩马腿规则)。

输入描述:

第一行输入一个整数n ( 1 ≦ n ≦ 2 × 10 5 ) n(1≦n≦2×10^5)n(1n2×105)
之后的n nn行,第i ii行输入两个整数x i , y i ( 1 ≦ x i , y i ≦ 2 × 10 5 ) x_i,y_i(1≦x_i,y_i≦2×10^5)xi,yi(1xi,yi2×105),代表第i ii个兵的位置为第x i x_ixi​ 行第y i y_iyi列。保证所有兵的位置两两不同。

输出描述:

输出两个正整数,分别代表符合条件的行号与列号。

如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测功能可能因此返回答案错误结果,请自行检查答案正确性。

示例1

输入:

3 1 2 2 3 3 2

输出:

1 1

说明:

在这个样例中,棋盘的布局如下(左下角为(1,1)):

示例2

输入:

4 1 4 4 1 2 2 3 3

输出:

1 2

说明:

在这个样例中,棋盘的布局如下(左下角为(1,1)):

解题思路

本题是离线计数 + 枚举的经典模型。由于马能攻击到的格子为固定的 8 个日字形偏移,反过来,对于每个兵,所有能攻击到该兵的位置只有这 8 个偏移坐标。因此,只需遍历所有兵,将每个可能的马位置累计攻击次数,最后选取攻击次数最多的位置作为答案。

1. 问题等价转化
2. 算法实现
  1. 存储兵位置:用map存储所有兵坐标,便于快速查找和遍历。
  2. 统计候选位置攻击数
    • 遍历每个兵( x 1 , y 1 ) (x1,y1)(x1,y1)
    • 对 8 个偏移( d x , d y ) (dx,dy)(dx,dy),计算候选马位置( x 2 , y 2 ) = ( x 1 + d x , y 1 + d y ) (x2,y2) = (x1+dx, y1+dy)(x2,y2)=(x1+dx,y1+dy)
    • x 2 ≤ 0 x2 \le 0x20y 2 ≤ 0 y2 \le 0y20,跳过(马必须在正整数行列)。
    • 在计数器map中令c[{x2,y2}]++,表示该位置能攻击到的兵数加一。
  3. 选取最优位置:遍历计数器c,找到值最大的位置,输出其坐标。
    • 使用max_element按值比较即可。
3. 复杂度分析

总结

通过反向枚举每个兵可能被攻击到的马位置,统计各候选位置的攻击次数,再取最大者,即可得到最优放置位置。整个过程无需考虑棋盘大小,只需保证坐标为正整数。

代码简要说明

  1. 偏移数组:预定义 8 个马步偏移dd
  2. 读入与标记:用map<array<ll,2>, bool> v标记所有兵的位置。
  3. 统计候选:遍历v中每个兵,对其 8 个偏移位置若合法则c[{x2,y2}]++
  4. 寻找最优:使用max_element找到c中值最大的键,输出该键坐标。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;constarray<array<ll,2>,8>dd={{{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}}};intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll n;cin>>n;map<array<ll,2>,bool>v;for(ll i=0;i<n;i++){ll x,y;cin>>x>>y;v[{x,y}]=true;}map<array<ll,2>,ll>c;for(constauto&[p,_]:v){constauto&[x1,y1]=p;for(constauto&[dx,dy]:dd){ll x2=x1+dx,y2=y1+dy;if(x2<=0||y2<=0)continue;c[{x2,y2}]++;}}constauto&[x,y]=max_element(c.begin(),c.end(),[](constauto&a,constauto&b){returna.second<b.second;})->first;cout<<x<<" "<<y<<"\n";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/17 18:55:11

NICO性能优化指南:基准测试与渲染调优的实用技巧

NICO性能优化指南&#xff1a;基准测试与渲染调优的实用技巧 【免费下载链接】nico a Game Framework in Nim inspired by Pico-8. 项目地址: https://gitcode.com/gh_mirrors/ni/nico NICO 是一个用 Nim 编写的轻量级游戏框架&#xff0c;其 API 深受 Pico-8 启发&…

作者头像 李华
网站建设 2026/8/17 18:53:39

长安汽车7月销量深度解析:新能源转型阵痛与市场突围策略

1. 市场寒潮下的长安汽车&#xff1a;7月销量数据深度解读最近&#xff0c;长安汽车的月度销量数据又成了圈内热议的话题。7月份的成绩单出来&#xff0c;用“跌跌不休”来形容&#xff0c;确实不算夸张。这已经不是长安第一次面临销量压力了&#xff0c;但连续几个月的下滑&am…

作者头像 李华
网站建设 2026/8/17 18:52:49

为什么你的每个 Coding Agent,都在「重新认识你的仓库」?

⭐ Terrain 开源地址&#xff1a;https://github.com/sopaco/terrain&#xff08;MIT License&#xff09;给 AI Agent 铺好「地图 道路 路标」的高性能工程环境开源方案&#xff0c;欢迎 Star / Issue 如果你同时用 Claude Code、Codex、Cursor 写代码&#xff0c;你会发现…

作者头像 李华
网站建设 2026/8/17 18:51:18

从 Reference User 到最小权限边界,深入理解 SAP Gateway User Self Service 的安全设计

企业门户里有一类功能看起来非常普通,注册账号、激活账号、修改密码、忘记密码重置。放到普通互联网系统里,这些能力往往由 IAM 平台完成。但进入 SAP Gateway Foundation 的经典 User Self Service 场景后,情况就复杂得多。 原因并不在于注册页面本身,而在于一次看似简单…

作者头像 李华
网站建设 2026/8/17 18:48:54

sbt-release 进阶玩法:如何把任意 sbt 任务转换成发布步骤

sbt-release 进阶玩法&#xff1a;如何把任意 sbt 任务转换成发布步骤 【免费下载链接】sbt-release A release plugin for sbt 项目地址: https://gitcode.com/gh_mirrors/sb/sbt-release sbt-release 是一款专为 Scala/sbt 项目打造的开源发布插件&#xff0c;它把版本…

作者头像 李华