2024牛客寒假集训营4 -- H数三角形(hard) 题解

目录

H数三角形(hard)

题目大意:

思路解析:

​编辑 

 代码实现:


H数三角形(hard)

题目大意:

        

思路解析:

         

通过这张图可以发现,左腰和右腰是对称的,那么只要对于 (i,j)这个点,如果有一个端点能通过左腰和右腰能够到达这个点那么他就能组成一个数字三角形,但是我们如果遍历找是否有这样的点时间复杂度就会变为N^3, (数字三角形要求整个底面是连续的,所以我们在连续底面统计每一个点能通过左腰和右腰达到最右边的点(这里统计可以用树状数组维护))我们统计这个点通过右腰和左腰能到达最左的点,那么这个区间之内就是合法的数字三角形。

 

 代码实现:

        

import java.io.*;
import java.util.*;public class Main {static int mod = (int) 1e9 + 7;static int mod9 = 998244353;static int N = 3003;static int[] tr;static Vector<Integer> g[];static int[][] d1; // 左腰static int[][] d2; // 右腰static int n;static int m;static long ans = 0;public static void main(String[] args) throws IOException {n = input.nextInt();m = input.nextInt();tr = new int[N];char[][] map = new char[N][N];g = new Vector[N * 2];for (int i = 0; i < n * 2 + 6; i++) {g[i] = new Vector<>();}d1 = new int[N][N];d2 = new int[N][N];for (int i = 1; i <= n; i++) {char[] s = input.next().toCharArray();for (int j = 1; j <= m; j++) {map[i][j] = s[j - 1];if (map[i][j] == '*'){ans --;d1[i][j] = d1[i-1][j+1] + 1;d2[i][j] = d2[i-1][j-1] + 1;}}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (map[i][j] != '*') continue;int k = j;while (k + 1<=m && map[i][k+1] == '*') k++;solve(i, j, k);j = k;}}out.println(ans);out.flush();out.close();br.close();}public static void add(int x, int val){for (; x <= m; x += x & -x) {tr[x] += val;}}public static int sum(int x){if (x <= 0) return 0;int res = 0;for (; x > 0; x -= x &-x) res+=tr[x];return res;}public static void solve(int row, int left, int right){int mx = 0;int i;for (i = left; i <= right ; i+=2) {int L = i;int R = L + d1[row][i] * 2 - 2;mx = Math.max(mx, R);g[R].add(i);add(i, 1);R = i;L = R - d2[row][i] * 2 + 2;ans += sum(i) - sum(L - 1);for (Integer integer : g[i]) {add(integer, -1);}g[i].clear();}for (; i <= mx; i+=2) {for (Integer integer : g[i]) {add(integer, -1);}g[i].clear();}mx = 0;for (i = left + 1; i<=right; i+=2) {int L = i;int R = L + d1[row][i] * 2 - 2;mx = Math.max(mx, R);g[R].add(i);add(i, 1);R = i;L = R - 2 * d2[row][i] + 2;ans += sum(i) - sum(L - 1);for (Integer integer :g[i]) {add(integer,-1);}g[i].clear();}for(; i<=mx;i+=2){for (Integer integer :g[i]) {add(integer,-1);}g[i].clear();}}// -------------------------------- 模板 ---------------------------public static long gcd(long a, long b) {if (a == 0) return b;if (b == 0) return a;return gcd(b, a % b);}public static int gcd(int a, int b) {if (a == 0) return b;if (b == 0) return a;return gcd(b, a % b);}public static long pow(long a, long b, long mod) {long res = 1;while (b > 0) {if ((b & 1) == 1) res = (res * a) % mod;a = (a * a) % mod;b >>= 1;}return res;}//static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static Input input = new Input(System.in);static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static class Input {public BufferedReader reader;public StringTokenizer tokenizer;public Input(InputStream stream) {reader = new BufferedReader(new InputStreamReader(stream), 32768);tokenizer = null;}public String next() {while (tokenizer == null || !tokenizer.hasMoreTokens()) {try {tokenizer = new StringTokenizer(reader.readLine());} catch (IOException e) {throw new RuntimeException(e);}}return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}}}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于PID-bang-bang控制算法的卫星姿态控制matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PID-bang-bang控制算法的卫星姿态控制。仿真输出控制器的控制收敛曲线&#xff0c;卫星姿态调整过程的动画。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB…

【数学建模规则】2024年第九届数维杯大学生数学建模挑战赛参赛指南

一、竞赛介绍 数维杯大学生数学建模挑战赛每年分为两场&#xff0c;每年上半年为数维杯国赛&#xff08;5月&#xff0c;俗称小国赛&#xff09;&#xff0c;下半年为数维杯国际赛(11月)&#xff0c;2023年第八届数维杯大学生数学建模挑战赛共有近1.4万名学生参赛&#xff0c;…

Google宣布暂停其AI工具“Gemini”生成人物图像的功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

下载 axios.js 文件到本地【linux】

方式一 npm install axios在$NODE_PATH/node_modules/axios/dist路径下即可找到axios.js。 方式二 1、百度搜索 GitHub 官网&#xff1a;https://github.com/ 2、搜索 axios 3、点击 axios/axios 4、下载到本地 5、解压&#xff0c;进入到 dist 文件夹** 参考&#x…

【UI自动化】使用poco框架进行元素唯一定位

直接选择&#xff1a; 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择&#xff1a; 3.poco(text/name).parent().child()[0].click()正则表达式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想记录下…

什么是SSD型云服务器?

​  SSD云服务器是一种使用固态硬盘代替传统HDD进行存储的虚拟机。SDD 使用闪存单元来存储数据&#xff0c;与云计算技术相结合&#xff0c;形成强大且高效的存储解决方案&#xff0c;可以随时随地访问。 SSD云服务器如何工作? SSD云服务器是利用虚拟化和云计算技术创建的。…

使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign&#xff08;签名&#xff09;进行请求&#xff0c;各接口对sign的签名内容、方式可能不一样&#xff0c;但一般都是从接口的入参中选择部分内容组成一个字符串&#xff0c;然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

【Vuforia+Unity】AR06-空间环境识别功能(AreaTargets)

Vuforia原理&#xff1a;把被识别的物体转成图、立体图、柱形图&#xff0c;3D模型、环境模型&#xff0c;然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容&#xff0c;然后参考模型自动隐藏-发布APP-识别生活中实物-数字内容叠加上去&#xff01; 不论你是…

【leetcode热题】填充每个节点的下一个右侧节点指针

给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到…

【Qt学习】QPushButton添加图标 并通过快捷键控制该图标

文章目录 1. 介绍2. 操作3. 相关资源文件 1. 介绍 我们知道&#xff1a;QPushButton表示一个按钮&#xff0c;用于响应用户的点击事件。QPushButton可以显示文本、图标或同时显示两者&#xff0c;也可以设置按钮的样式和状态。 我们利用这点 实现一个简单的功能&#xff1a;用…

C#学习总结

1、访问权限 方法默认访问修饰符&#xff1a;private 类默认访问修饰符&#xff1a;internal 类的成员默认访问修饰符&#xff1a;private 2、UserControl的使用 首先添加用户控件 使用时一种是通过代码添加&#xff0c;一种是通过拖动组件到xaml中

【C++】类和对象---友元,内部类,匿名对象详解

目录 友元 友元函数 友元类 内部类 匿名对象 ⭐友元 友元提供了一种突破封装的方式&#xff0c;有时提供了便利。但是友元会增加耦合度&#xff0c;破坏了封装&#xff0c;所以 友元不宜多用。 友元分为&#xff1a;友元函数和友元类。 ⚡友元函数 先看一个问题&#x…

IntelliJ IDEA 创建Spring Boot 项目整合jdbc详细步骤

IntelliJ IDEA 创建Spring Boot 项目&整合jdbc详细步骤 1、打开 IntelliJ IDEA 软件2、使用 "Spring Initializr" 作为项目类型&#xff0c;新建项目工程3、选择对应的SpringBoot版本和依赖4、Spring Boot 项目的结构5、创建一个TestController&#xff0c;并运行…

Opencv实战(2)绘图与图像操作

Opencv实战(2)绘图与图像操作 指路前文&#xff1a;Opencv实战(1)读取与像素操作 三、基本绘图 文章目录 Opencv实战(2)绘图与图像操作三、基本绘图(1).line(2).rectangle(3).circle 四、图像处理(1).颜色空间1.意义2.cvtColor()3.inRange()4.适应光线 (2).形态操作1.腐蚀2.膨…

Spring中的ApplicationContext.publishEvent

简单理解 其实就是监听处理。比如找工作平台上&#xff0c;雇主 employer 发布自己的雇佣条件&#xff0c;目的是平台中有符合条件的求职者时&#xff0c;及时向雇主推荐。求职者发布简历&#xff0c;当平台发现某个求职者比较符合条件&#xff0c;就触发被动&#xff0c;推荐…

uni-app 经验分享,从入门到离职(五)——由浅入深 uni-app 数据缓存

文章目录 &#x1f4cb;前言⏬关于专栏 &#x1f3af;什么是数据存储&#x1f9e9;数据存储——存储&#x1f4cc; uni.setStorage(OBJECT)&#x1f4cc; uni.setStorageSync(KEY,DATA) &#x1f9e9;数据存储——获取&#x1f4cc; uni.getStorage(OBJECT)&#x1f4cc; uni.g…

vue 动态渲染本地图片不显示的解决方法

代码更改前 <img class"img" :src"/assets/images/${syntheticalGrade}.png" />data(){return{syntheticalGrade:"1"} }效果图&#xff1a; 解决代码 <img class"img" :src"require(/assets/images/${syntheticalGrad…

Atcoder ABC340 A-D题解

比赛链接:ABC340 话不多说&#xff0c;看题。 Problem A: 签到。 #include <bits/stdc.h> using namespace std; int main(){int a,b,d;cin>>a>>b>>d;for(int ia;i<b;id)cout<<i<<endl;return 0; } Problem B: 还是签到题。一个v…

2024-02-21 作业

作业要求&#xff1a; 复习课上内容 //已完成结构体字节对齐&#xff0c;64位没做完的做完&#xff0c;32位重新都做一遍&#xff0c;课上指定2字节对齐的做一遍&#xff0c;自己验证 //已完成两种验证大小端对齐的代码写一遍复习指针内容 //已完成完善顺序表已写出的…

记录 使用FFMPEG 笔记本摄像头推流

一、使用 FFMPEG 测试摄像头拉流显示 # 获取摄像头名称 ffmpeg -list_devices true -f dshow -i dummy# 我笔记本上的摄像头名称如下 device_pnp_\\?\usb#vid_0408&pid_1020&mi_00#6&199e90f7&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global# 使…