蓝桥杯2024年真题java B组 【H.拼十字】

ops/2025/3/6 23:01:36/

java_B_H_0">蓝桥杯2024年真题java B组 【H.拼十字】

原题链接:拼十字
思路:

使用树状数组或线段树解决。

先将输入的信息存入到一个n行3列的数组中,将信息排序,按照长度小到大,长相同时,宽度小到大
排序。
建立三个树状数组,维护三种颜色对应的信息,树状数组的索引就是数据的宽度,值就是有几个这样宽度的数据。
遍历数组每组数据:
当颜色为0时,假设该组数据为6 3 0,则要求的就是其他两个颜色中宽度比当前宽度大的(因为长度已经从小到大排过序),也就是去1,2树状数组中找宽度比当前3的宽度大的,就是下标大于3的(就是宽度大于三的),就是1,2树状数组中的4到无穷大(就是到N)的和。
将该组数据加到对应的树状数组0中去,就是tree0.add(arr[i][1],1)

其他两种情况同理。
该过程中的树状数组中的很多空间是无效的,但还是通过了。

code:

java">import java.io.*;
import java.util.Arrays;
public class Main {static int N = 100005;static int MOD = 1000000007;public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));in.nextToken();int n = (int) in.nval;//数据信息,一行存储一个数据项int[][] arr = new int[n + 1][3];Tree tree0 = new Tree(N);Tree tree1 = new Tree(N);Tree tree2 = new Tree(N);for (int i = 1; i <= n; i++) {in.nextToken();arr[i][0] = (int) in.nval;in.nextToken();arr[i][1] = (int) in.nval;in.nextToken();arr[i][2] = (int) in.nval;}long res = 0;//排序,先按照长度升序排序,在按照宽度进行升序排序Arrays.sort(arr, (a, b) -> {if (a[0] != b[0]) {return Integer.compare(a[0], b[0]); // 按 arr[i][0] 升序}return Integer.compare(a[1], b[1]); // 如果 arr[i][0] 相同,按 arr[i][1] 升序});for (int i = 1; i <= n; i++) {//将当前的节点加入线段树中//先求和res %= MOD;if (arr[i][2] == 0){res += tree1.sum(arr[i][1]);res += tree2.sum(arr[i][1]);tree0.add(arr[i][1],1);} else if (arr[i][2] == 1) {res += tree0.sum(arr[i][1]);res += tree2.sum(arr[i][1]);tree1.add(arr[i][1],1);}else{res += tree0.sum(arr[i][1]);res += tree1.sum(arr[i][1]);tree2.add(arr[i][1],1);}}out.print(res);out.flush();out.close();br.close();}
}
class Tree{long[] tree;int N;public Tree(int N){this.N = N;tree = new long[N + 1];}//获取最右边的1public long lowBit(int i) {return i & -i;}public void add(int i,long  val) {while (i <= N) {tree[i] += val;i += lowBit(i);}}//计算的是原数组中的 1-i 对应的和public long query(int i) {long res = 0;while (i > 0) {res += tree[i];i -= lowBit(i);}return res;}public long sum(int i){return query(N) - query(i);}
}

http://www.ppmy.cn/ops/163719.html

相关文章

【14上机2题】杨辉三角打印

杨辉三角打印 //打印杨辉三角 #include<bits/stdc.h> using namespace std;int main() {int n;cin>>n;int a[n][n];for(int i0;i<n;i){ //行 //每行的首尾元素均为1a[i][0]1;a[i][i]1; //注意尾元素为a[i][i] for(int j1;j<i;j){ a[i][j]a[i-1][j]a[i-1]…

数据结构与算法:选择排序

介绍 选择排序是一种简单直观的排序算法&#xff0c;其基本思想是&#xff1a;从待排序的数据元素中&#xff0c;每次选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其与序列的起始位置交换&#xff0c;然后继续对剩余的元素进行排序&#xff0c;知道整个序列排…

掌握 Joblib:机器学习模型存储与加载的秘密武器

前言 你有没有遇到过这种让人崩溃的场景:辛辛苦苦训练好的模型,一关闭 Python 进程就像消失在空气中,一点痕迹都不留下?或者你花了好几个小时处理数据,结果下一次运行时又得从头来过?这简直就像精心烤制的蛋糕,端到桌子上,转眼被风吹走! 别担心,今天你将遇到一个神…

【运维】轻量级服务器运行情况监控组件Glances

1.服务器环境ubuntu 2.全自动安装脚本 创建脚本&#xff1a; nano install_glances.sh 粘贴最后脚本内容 给权限&#xff1a; chmod x install_glances.sh 运行脚本&#xff1a; ./install_glances.sh 脚本内容&#xff1a; #!/bin/bashecho "开始全自动安装 Glances…

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…

K8S学习之基础六:k8s中pod亲和性

Pod节点亲和性和反亲和性 podaffinity&#xff1a;pod节点亲和性指的是pod会被调度到更趋近与哪个pod或哪类pod。 podunaffinity&#xff1a;pod节点反亲和性指的是pod会被调度到远离哪个pod或哪类pod 1. Pod节点亲和性 requiredDuringSchedulingIgnoredDuringExecution&am…

Spring Cloud LoadBalancer详解

一、介绍 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现,用来替代Ribbon(已经停更), 二、Ribbon和Loadbalance 对比 组件组件提供的负载策略支持负载的客户端Ribbon随机 RandomRule轮询 RoundRobinRule 重试 RetryRule最低并发 Bes…

DeepSeek掘金——DeepSeek-R1驱动的金融分析师

DeepSeek掘金——DeepSeek-R1驱动的金融分析师 我们将专注于创建一个专门用于提取相关新闻见解的代理。该代理将利用 DeepSeek-R1 提供全面的市场洞察。 在当今快节奏的金融市场中,获取准确及时的信息对于做出明智的投资决策至关重要。想象一下,一位人工智能金融分析师能够分…