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

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;
}

相关文章:

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

Right Triangles 题目描述 You are given a n m nm nm 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. …...

怎样将word默认Microsoft Office,而不是WPS

设置——>应用——>默认应用——>选择"word"——>将doc和docx都选择Microsoft Word即可...

C语言之进程的学习2

Env环境变量&#xff08;操作系统的全局变量&#xff09;...

web使用cordova打包Andriod

一.安装Gradel 1.下载地址 Gradle Distributions 2.配置环境 3.测试是否安装成功 在cmd gradle -v 二.创建vite项目 npm init vitelatest npm install vite build 三.创建cordova项目 1.全局安装cordova npm install -g cordova 2. 创建项目 cordova create cordova-app c…...

内卷情况下,工程师也应该了解的项目管理

简介&#xff1a;大家好&#xff0c;我是程序员枫哥&#xff0c;&#x1f31f;一线互联网的IT民工、&#x1f4dd;资深面试官、&#x1f339;Java跳槽网创始人。拥有多年一线研发经验&#xff0c;曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队&…...

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来&#xff1a;深入了解机器学习的核心技术与实际应用 &#x1f48e;1.引言&#x1f48e;1.1 什么是机器学习&#xff1f; &#x1f48e;2 机器学习的分类&#x1f48e;3 常用的机器学习算法&#x1f48e;3.1 线性回归&#xff08;Linear Regression&#xff09;&#x1…...

1-3.文本数据建模流程范例

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…...

【FFmpeg】avformat_alloc_output_context2函数

【FFmpeg】avformat_alloc_output_context2函数 1.avformat_alloc_output_context21.1 初始化AVFormatContext&#xff08;avformat_alloc_context&#xff09;1.2 格式猜测&#xff08;av_guess_format&#xff09;1.2.1 遍历可用的fmt&#xff08;av_muxer_iterate&#xff0…...

Flask 缓存和信号

Flask-Caching Flask-Caching 是 Flask 的一个扩展&#xff0c;它为 Flask 应用提供了缓存支持。缓存是一种优化技术&#xff0c;可以存储那些费时且不经常改变的运算结果&#xff0c;从而加快应用的响应速度。 一、初始化配置 安装 Flask-Caching 扩展&#xff1a; pip3 i…...

基于weixin小程序农场驿站系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;农场资讯管理&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;用户分享管理&#xff0c;分享类型管理&#xff0c;商品信息管理&#xff0c;商品类型管理 开发系统&#xff1a;Windows 架构模式…...

JAVA将List转成Tree树形结构数据和深度优先遍历

引言&#xff1a; 在日常开发中&#xff0c;我们经常会遇到需要将数据库中返回的数据转成树形结构的数据返回&#xff0c;或者需要对转为树结构后的数据绑定层级关系再返回&#xff0c;比如需要统计当前节点下有多少个节点等&#xff0c;因此我们需要封装一个ListToTree的工具类…...

设计模式——开闭、单一职责及里氏替换原则

设计原则是指导软件设计和开发的一系列原则&#xff0c;它们帮助开发者创建出易于维护、扩展和理解的代码。以下是你提到的几个关键设计原则的简要说明&#xff1a; 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;&#xff1a; 开闭原则由Bertrand Meyer提出&am…...

代码随想录算法训练营第59天:动态[1]

代码随想录算法训练营第59天&#xff1a;动态 两个字符串的删除操作 力扣题目链接(opens new window) 给定两个单词 word1 和 word2&#xff0c;找到使得 word1 和 word2 相同所需的最小步数&#xff0c;每步可以删除任意一个字符串中的一个字符。 示例&#xff1a; 输入: …...

jvm性能监控常用工具

在java的/bin目录下有许多java自带的工具。 我们常用的有 基础工具 jar:创建和管理jar文件 java&#xff1a;java运行工具&#xff0c;用于运行class文件或jar文件 javac&#xff1a;java的编译器 javadoc&#xff1a;java的API文档生成工具 性能监控和故障处理 jps jstat…...

ISP IC/FPGA设计-第一部分-SC130GS摄像头分析-IIC通信(1)

1.摄像头模组 SC130GS通过一个引脚&#xff08;SPI_I2C_MODE&#xff09;选择使用IIC或SPI配置接口&#xff0c;通过查看摄像头模组的原理图&#xff0c;可知是使用IIC接口&#xff1b; 通过手册可知IIC设备地址通过一个引脚控制&#xff0c;查看摄像头模组的原理图&#xff…...

HTTP协议头中X-Forwarded-For是能做什么?

X-Forwarded-For和相关几个头部的理解 $remote_addr 是nginx与客户端进行TCP连接过程中&#xff0c;获得的客户端真实地址. Remote Address 无法伪造&#xff0c;因为建立 TCP 连接需要三次握手&#xff0c;如果伪造了源 IP&#xff0c;无法建立 TCP 连接&#xff0c;更不会有后…...

Linux高并发服务器开发(八)Socket和TCP

文章目录 1 IPV4套接字结构体2 TCP客户端函数 3 TCP服务器流程函数代码粘包 4 三次握手5 四次挥手6 滑动窗口 1 IPV4套接字结构体 2 TCP客户端 特点&#xff1a;出错重传 每次发送数据对方都会回ACK&#xff0c;可靠 tcp是打电话的模型&#xff0c;建立连接 使用连接 关闭连接…...

力扣第220题“存在重复元素 III”

在本篇文章中&#xff0c;我们将详细解读力扣第220题“存在重复元素 III”。通过学习本篇文章&#xff0c;读者将掌握如何使用桶排序和滑动窗口来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述…...

Qt实战项目——贪吃蛇

一、项目介绍 本项目是一个使用Qt框架开发的经典贪吃蛇游戏&#xff0c;旨在通过简单易懂的游戏机制和精美的用户界面&#xff0c;为玩家提供娱乐和编程学习的机会。 游戏展示 二、主要功能 2.1 游戏界面 游戏主要是由三个界面构成&#xff0c;分别是游戏大厅、难度选择和游戏…...

Windows 10,11 Server 2022 Install Docker-Desktop

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker-compose Compose 是用于定义和运行…...

Go语言实现轻量级C2框架:从零构建命令控制原型

1. 项目概述&#xff1a;一个轻量级、可自托管的C2框架初探最近在整理自己的安全研究环境时&#xff0c;发现很多开源C2&#xff08;Command and Control&#xff09;框架要么过于庞大&#xff0c;依赖复杂&#xff0c;要么功能过于单一&#xff0c;难以满足从学习到模拟测试的…...

基于Web的Ollama客户端:本地大模型交互的图形化解决方案

1. 项目概述&#xff1a;一个与本地大模型交互的现代客户端 如果你最近在本地部署了像 Llama 3、Mistral 或 Qwen 这类开源大语言模型&#xff0c;大概率会接触到 Ollama 这个工具。它让模型的下载、运行和管理变得异常简单&#xff0c;一条 ollama run llama3 命令就能开启对…...

告别硬盘数据丢失焦虑!电脑专属5种恢复方法,无踩坑,速存

日常使用电脑时&#xff0c;文件误删是高频突发状况——辛苦整理的办公文档、珍藏的生活影像、重要的程序安装包&#xff0c;一旦不小心删除&#xff0c;难免让人手足无措。好在2026年&#xff0c;随着数据存储技术的迭代与恢复工具的升级&#xff0c;电脑误删文件的恢复成功率…...

Node.js连接币安生态:MCP社区工具实战与架构解析

1. 项目概述&#xff1a;一个连接Node.js与币安生态的MCP社区工具最近在捣鼓一些加密货币数据分析和自动化策略的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫node2flow-th/binance-th-mcp-community。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但拆…...

Android AI助手开发实战:基于MVVM与OpenAI API的AnywhereGPT项目解析

1. 项目概述与核心价值最近在折腾移动端AI应用&#xff0c;发现一个挺有意思的开源项目&#xff0c;叫AnywhereGPT-Android。简单来说&#xff0c;它就是一个让你能在Android手机上&#xff0c;通过调用OpenAI的API&#xff08;比如GPT-3.5/4&#xff09;或者本地部署的模型&am…...

ncmdump终极指南:3步快速解锁网易云音乐NCM加密文件的完整免费解决方案

ncmdump终极指南&#xff1a;3步快速解锁网易云音乐NCM加密文件的完整免费解决方案 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲只能在特定客户端播放而烦恼吗&#xff1f;ncmdump这款强大的NCM解密工…...

为Adafruit CLUE开发板设计超薄可拆卸3D打印外壳:从建模到装配全指南

1. 项目概述&#xff1a;为你的CLUE开发板“量体裁衣”如果你手头有一块Adafruit CLUE开发板&#xff0c;大概率会和我有同样的感受&#xff1a;这块板子功能强大&#xff0c;集成了屏幕、按钮、一堆传感器&#xff0c;但裸露的电路板和元器件总让人有点“心疼”&#xff0c;怕…...

你还在手写提示词?:2024最稀缺的提示词自动化工作流(含可运行Python脚本+权重映射API)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney提示词编写的核心范式演进 早期提示词依赖直觉式描述&#xff08;如“a cat”&#xff09;&#xff0c;而现代范式已转向结构化、分层可控的语义工程。当前主流实践将提示词解耦为三类要素&a…...

Minecraft服务器技能数据自动化管理:mcpskills-cli命令行工具实战指南

1. 项目概述与核心价值 最近在折腾一些Minecraft服务器的自动化管理&#xff0c;发现很多重复性的技能配置、权限同步工作特别耗时。手动去游戏里敲指令&#xff0c;或者对着配置文件一条条改&#xff0c;效率低还容易出错。就在这个当口&#xff0c;我发现了 alibiinformatio…...

从EGO-Planner到集群协同:分布式轨迹优化在无人机编队中的应用

1. 项目概述&#xff1a;从单机到集群的自主飞行进化如果你玩过无人机&#xff0c;或者关注过机器人领域&#xff0c;大概会知道让一台机器在空中自主规划路径、避开障碍物已经是个不小的挑战。那么&#xff0c;想象一下&#xff0c;让一群无人机像鸟群一样&#xff0c;在复杂、…...