Codeforces Testing Round 1 B. Right Triangles 题解 组合数学

Right Triangles

题目描述

You are given a n × m n×m n×m field consisting only of periods (‘.’) and asterisks (‘*’). Your task is to count all right triangles with two sides parallel to the square sides, whose vertices are in the centers of ‘*’-cells. A right triangle is a triangle in which one angle is a right angle (that is, a 90 degree angle).

输入格式

The first line contains two positive integer numbers n n n and m m m ( 1 < = n , m < = 1000 1<=n,m<=1000 1<=n,m<=1000 ). The following n n n lines consist of m m m characters each, describing the field. Only ‘.’ and ‘*’ are allowed.

输出格式

Output a single number — total number of square triangles in the field. Please, do not use %lld specificator to read or write 64-bit integers in C++. It is preffered to use cout (also you may use %I64d).

样例 #1

样例输入 #1

2 2
**
*.

样例输出 #1

1

样例 #2

样例输入 #2

3 4
*..*
.**.
*.**

样例输出 #2

9

原题

Codeforces——传送门
洛谷——传送门

思路

题目要求是求图中三个顶点均为 ′ ∗ ′ '*' 字符的直角三角形个数。我们发现,直角三角形有两条直角边和一个拐点,而两条直角边和一个拐点唯一确定了一个直角三角形。所以如果我们知道了以任意一点为拐点的行直角边个数和列直角边个数,便可以确定以该点为拐点的直角三角形个数,从而计算出答案。那么思路便是先存储每行的 ′ ∗ ′ '*' 点个数和每列的 ′ ∗ ′ '*' 点个数,再遍历图,找到所有能构成直角三角形的点,接着以其为拐点,计算行直角边个数与列直角边个数的组合数并统计进 a n s ans ans 中即可。

代码

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;int main()
{ios::sync_with_stdio(0);cin.tie(0);int n, m;cin >> n >> m;vector<vector<char>> g(n, vector<char>(m)); // 存图vector<int> hor(n, 0), ver(m, 0);           // 统计每行的'*'点数和每列的'*'点数for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cin >> g[i][j];if (g[i][j] == '*'){hor[i]++;ver[j]++;}}}i64 ans = 0; // 直角三角形个数// 遍历图,找到所有能构成直角三角形的点for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (g[i][j] == '*') // 让其成为拐点,则其与该行的其他'*'构成一条直角边,与该列的其他'*'构成另一条直角边{ans += (hor[i] - 1) * (ver[j] - 1); // 行上直角边与列上直角边的组合个数即为以该点为拐点的直角三角形个数}}}cout << ans << '\n';return 0;
}

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

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

相关文章

Nacos 扫盲

文章目录 Nacos 技术扫盲文档什么是 Nacos&#xff1f;Nacos 的主要功能Nacos 的使用场景如何使用 Nacos使用示例Nacos 的优缺点与其他同类工具的对比结论 扩展如何确认自己的项目有没有使用Nacos1. 检查配置文件2. 检查项目依赖3. 检查代码中是否有 Nacos 相关的使用4. 检查启…

使用Pogo-DroneCAN CANHUB扩展板扩展飞控的CAN口

关键词&#xff1a;Ardupilot&#xff0c;Pixhawk&#xff0c;DroneCAN CANHUB扩展&#xff0c;扩展飞控CAN口 keywords&#xff1a;Ardupilot&#xff0c;Pixhawk&#xff0c;DroneCAN CANHUB Extend 摘要&#xff1a;使用Pogo-DroneCAN CANHUB扩展板扩展飞控CAN口&#xff…

面试专区|【46道软件性能测试高频题整理(附答案背诵版)】

性能测试包含的方法有哪些&#xff08;至少列举5种&#xff09;&#xff1f; 性能测试是评估软件系统在各种条件下的表现的过程&#xff0c;其中包括多种测试方法。以下是其中一些常见的性能测试方法&#xff1a; 负载测试&#xff1a;通过模拟不同负载情况来测试系统的性能表…

面试专区|【75道软件测试基础高频题整理(附答案背诵版)】

软件测试分为几个阶段 各阶段的测试策略和要求&#xff1f; 软件测试分为以下几个阶段&#xff1a; 单元测试阶段&#xff1a;测试策略注重对软件的最小代码单元进行测试&#xff0c;通常由开发人员进行。要求所有关键函数和方法都需要被测试覆盖&#xff0c;测试案例应覆盖正…

一文讲解Docker入门到精通

一、引入 1、什么是虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;它允许在一台物理机上创建多个独立的虚拟环境&#xff0c;这些环境被称为虚拟机&#xff08;VM&#xff09;。每个虚拟机都可以…

element ui form 表单验证

表单验证方法 在el-form元素上总体设置校验规则rules&#xff0c;下面是官方案例 <el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"100px" class"demo-ruleForm"><el-form-item label"…

湖北大学2024年成人高考函授报名专升本会计学专业介绍

湖北大学&#xff0c;这所坐落于历史文化名城武汉的高等学府&#xff0c;自其创立之初&#xff0c;便秉持着“厚德博学&#xff0c;求是创新”的校训&#xff0c;致力于培养一代又一代的优秀人才。而今&#xff0c;为满足广大社会人士对高等教育的渴求&#xff0c;特别是那些已…

【Java EE】Spring IOCDI

Spring IOC & DI 文章目录 Spring IOC & DI一、Spring是什么&#xff1f;二、IOC(控制反转)2.1 通俗理解2.2 造汽车的例子理解IOC2.3 IOC详解1. 获取Bean2. 方法注解——Bean1. 应用场景&#xff1a;2. 应用方法&#xff1a;3. 注意要点&#xff1a; 特别注意: 四、DI4…

【第10章】MyBatis-Plus持久层接口之Db Kit

文章目录 前言一、使用示例二、使用提示总结 前言 Db Kit 是 Mybatis-Plus 提供的一个工具类&#xff0c;它允许开发者通过静态调用的方式执行 CRUD 操作&#xff0c;从而避免了在 Spring 环境下可能出现的 Service 循环注入问题&#xff0c;简化了代码&#xff0c;提升了开发…

计算经纬度坐标之间的真实距离

要计算两组经纬度坐标之间的距离&#xff0c;我们可以使用大地测量学中的公式&#xff0c;例如Haversine公式或者更精确的Vincenty公式。这里我将使用Haversine公式&#xff0c;因为它适用于小范围内的距离计算&#xff0c;且计算相对简单。 Haversine公式的基本形式如下&…

计算机视觉 | 基于 PointNet 网络的飞机零件 3D 点云分割

目录 一、简要介绍二、环境设置2.1 实验配置2.2 必要库安装 三、数据集解析3.1 数据集加载3.2 数据文件夹结构3.3 点云数据可视化3.4 数据获取与预处理3.5 数据集定义 四、模型组网4.1 PointNet 介绍4.2 Paddle模型组网4.3 模型概要 五、模型训练六、模型预测七、总结 Hi&#…

2.1 程序设计语言基础

程序设计语言概述 常见的编程语言 编译和解释 程序设计语言的基本成分 数据成分、运算成分、控制成分、传输成分 函数 传值调用、传址调用 编译程序基本原理

使用Python实现一个简单的密码管理器

文章目录 一、项目概述二、实现步骤2.1 安装必要的库2.2 设计密码数据结构2.3 实现密码加密和解密2.4 实现主要功能2.4.1 添加新密码2.4.2 显示所有密码2.4.3 查找特定密码2.4.4 更新密码2.4.5 删除密码 2.5 实现用户界面 三、代码示例3.1 加密和解密示例3.2 用户界面示例 在现…

window上部署sql server改动端口、和sqlserver的一些还原、批量插入存储过程的命令

1.端口的查看和启动 --windows上安装上sql server数据库后&#xff0c;搜索界面搜索sql&#xff0c;会出现配置管理器&#xff0c;点击进入 --进入后再次选择配置管理器 2. sqlserver数据库还原图形化 sqlserver还原数据库时会使数据库进入一个restore的还原状态&#xff0c;…

昇思25天学习打卡营第6天|Vision Transformer

文章目录 昇思MindSpore应用实践基于MindSpore的Vision Transformer1、Vision Transformer&#xff08;ViT&#xff09;简介网络结构 2、Attention模块Encoder部分用到的功能函数&#xff1a;整体构建ViT模型 3、模型训练4、模型验证 Reference 昇思MindSpore应用实践 本系列文…

前端无感登录(无感刷新token)

1. 在响应器中拦截&#xff08;判断token返回过期后&#xff0c;调用刷新token的接口&#xff09; 2. 后端返回过期时间&#xff0c;前端判断token的过期时间&#xff0c;去调用刷新token的接口 3. 写定时器&#xff0c;定时刷新token接口 流程&#xff1a; 1. 登录成功后保存两…

降薪20%,那些压力山大的事情

1.开会一天&#xff0c;研发工作没完成&#xff0c;怎么办&#xff1f;&#xff1f; 2.项目接手&#xff0c;一堆问题等着处理怎么办&#xff1f; 3.产品研发&#xff0c;客户验收&#xff0c;公司要求&#xff0c;同事间相互的配合&#xff0c;完成一件事那么难&#xff0c;…

数据结构和顺序表

什么是数据结构 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 数据元素的三要素 数据结构包括三方面的内容&#xff1a;逻辑结构、存储结构、数据的运算。 逻辑结构 逻辑结构是指数据元素之间的逻辑关系&#xff0c;即从逻辑关系上描述数据。数据的逻辑结…

Android 第三方组件整理

Banner图&#xff1a; me.militch:banner-holder 注解&#xff1a; com.jakewharton:butterknifecom.jakewharton:butterknife-compiler 拼音&#xff1a; com.github.promeg:tinypinyin 日期: com.haibin:calendarview 二维码扫码&#xff1a; com.journeyapps:zxing…

跨过45分门槛,单独划线让软考证书可能失而复得

在软考的竞技场上&#xff0c;分数是拿证的那道坎&#xff0c;那就是45分&#xff01;但别急&#xff0c;故事总有转折&#xff0c;国家为了那些在乡村振兴道路上奋力追赶的地区&#xff0c;特别开启了一扇窗——单独划线政策。 单独划线地区分数线并不是固定的&#xff0c;届时…