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

洛谷 AT_abc275_c [ABC275C] Counting Squares 题解

大致题意

求以 # 为顶点的正方形个数。

思路分析

一道水黄。

首先我们可以看到题目范围非常小,仅仅只是一个 9 × 9 9\times9 9×9 的字符矩阵,而且还给了 2 2 2 秒的时间,所以是完全可以暴力的。

可以用 set 存储每个 # 号的位置,枚举正方形的两个点 i i i j j j,设另外两个点为 n n n m m m,容易得到 n x = i x + i y − j y , n y = i y − i x + j x n_x=i_x+i_y-j_y,n_y=i_y-i_x+j_x nx=ix+iyjy,ny=iyix+jx m x = j x + i y − j y , m y = j y − i x + j x m_x=j_x+i_y-j_y,m_y=j_y-i_x+j_x mx=jx+iyjy,my=jyix+jx 四个公式求出 n n n m m m 的坐标,在判断是否是 # 即可。

需要注意的是,由于每个角在枚举时都会算一遍,所以答案要乘 1 4 \frac{1}{4} 41

Code

代码如下:

#include <iostream>
#include <set>
using namespace std;
signed main() {ios::sync_with_stdio(false), cin.tie(), cout.tie();char ch;int ans = 0;set <pair<int, int>> s;for (int i = 1; i <= 9; ++i)for (int j = 1; j <= 9; ++j) {cin >> ch;if (ch == '#') s.insert({i,j});//初始化 s}for (pair <int, int> i : s)for (pair <int, int> j : s)if (i != j) {//如果不是同一个点才进行操作int x = i.second - j.second, y = i.first - j.first;if (s.find({i.first + x, i.second - y}) != s.end() && s.find({j.first + x, j.second - y}) != s.end()) ++ans;//判断,累加答案}cout << ans / 4;//答案要除以 4return 0;
}

http://www.mrgr.cn/news/37827.html

相关文章:

  • Matlab 软件入门
  • Diameter协议
  • 深入探索 PyTorch 在机器学习中的应用
  • 2024 CSP 游记
  • C++入门day5-面向对象编程(终)
  • 降AI率不再难:芝士AI去痕工具,让论文原创性飙升~~~
  • 组播基础-2-IGMP协议
  • 个人网站介绍和部署(开源)
  • 智能编辑器、版本控制与自动化脚本
  • Vert.x,Databases
  • 是否是递增的字符串(c语言)
  • Python画笔案例-067 绘制配乐七角星
  • 「漏洞复现」誉龙视音频综合管理平台 RelMedia/FindById SQL注入漏洞
  • 【中级通信工程师】终端与业务(十一):市场营销计划、实施与控制
  • 深度学习:迁移学习
  • 深入理解 `torch.nn.Linear`:维度变换的过程详解与实践(附图、公式、代码)
  • 深入 Spring RestTemplate 源码:掌握 HTTP 通信核心技术
  • ROS与无人驾驶学习笔记(一)——ROS基本操作
  • 【智享AI直播官网】—智享AI直播源码部署—OEM贴牌!
  • “天翼云息壤杯”高校AI大赛开启:国云的一场“造林”计划