ACM 粗心永远AC不了系列——小Hi的烦恼|“五维数点”问题

2024-03-30 04:48

本文主要是介绍ACM 粗心永远AC不了系列——小Hi的烦恼|“五维数点”问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


问题来源:hiho一下第147周 小Hi的烦恼

题目1 : 小Hi的烦恼

时间限制: 5000ms
单点时限: 1000ms
内存限制: 1024MB
描述

小Hi从小的一大兴趣爱好就是学习,但是他发现尽管他认真学习,依旧有学神考的比他好。

小Hi在高中期间参加了市里的期末考试,一共五门:语文、数学、英语、物理、化学。

成绩出来之后,小Hi发现有些同学,所有科目都考的比他好,他很烦恼。所以他想知道所有科目都比自己名次靠前的同学的人数。

为了方便,可以认为不存在两个人某一门名次是相同的。

其他同学们也想知道有多少人全面碾压了他们,所以你需要对所有人输出答案。

解题方法提示

输入

第一行,一个正整数N(N <= 30000),表示人数。

接下来N行,每行五个整数,分别表示五门课依次的排名。

输出

输出共N行,每行一个整数,表示答案。

样例输入
4
1 1 2 2 1
2 3 3 3 2
3 2 1 1 3
4 4 4 4 4
样例输出
0
1
0
3
=====================================我是分割线======================================

思路1:直接两两比较,算法效率O(N ^2),肯定没那么简单,这样输进去的结果是超时。

思路2:一种非常巧妙的位映射操作,使得效率打到O(N^2/32)。具体操作如下

样例输入
4
1 1 2 2 1
2 3 3 3 2
3 2 1 1 3
4 4 4 4 4

1.按输入建立个人排名pr[][]、各科排名sr[][]



2.生成排名比较表rc[][],rc[i][j]表示第j科比i名靠前的同学学号是什么,用位表示


第n位为1表示n号同学在第i名之前

这样子每n行只需要考虑比n-1行1位1就行了,而这个1可以从sr中得到 耗时O(5N)



3.根据排名比较表rc[][]和个人排名表pr[][]对应生成所有科目比自己强的人的集合


这个用betset数据结构就可以表示对位操作,很方便


源代码


import java.util.BitSet;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner cin = new Scanner(System.in);while (cin.hasNext()) {int n = cin.nextInt();int pr[][] = new int[n][5];// 第a号学生第b科排rank[i][j]名int sr[][] = new int[n + 1][5];// 第a科排第b名的学生是id[j][i]号BitSet rc[][] = new BitSet[n + 1][5];// 比a号学生第b科排名靠前的学生的集合BitSet[i][j],第i位为1表示i号学生比a号学生第b科靠前for (int i = 0; i < n; i++) {for (int j = 0; j < 5; j++) {int k = cin.nextInt();pr[i][j] = k;// 个人排名,i号学生的j科排第 k 名sr[k][j] = i;// 科目排名,j科的排第k名是i号学生}}for (int j = 0; j < 5; j++) {// 构建排名详情表 j表示第j科rc[1][j] = new BitSet(n);// j科排名在第k名之上的学生为0for (int k = 2; k <= n; k++) {// k表示第k名 j科排名在第k名之上的学生是那几个rc[k][j] = new BitSet(n);rc[k][j].or(rc[k - 1][j]);// 获取第排名在k-1名的之上的学生复制过来rc[k][j].set(sr[k - 1][j]);// 把第k-1名的学生设置为true}}for (int i = 0; i < n; i++) {// i表示第i号学生 输出结果int k = 0, lastk = 0;for (int j = 3; j >= 0; j--) {// j表示第j科,从倒数第二科开始向后与k = pr[i][j];// k表示学号为i的学生第j科排第k名lastk = pr[i][j + 1];// lastk表示学号为i的学生第j + 1科排第lastk名rc[k][j].and(rc[lastk][j + 1]);}System.out.println(rc[k][0].cardinality());}}}
}

这篇关于ACM 粗心永远AC不了系列——小Hi的烦恼|“五维数点”问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860509

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.