常用网址及OJ

浏览器的书签越加越多。索性集合在博客里。有新的常用网址还会更新。

The ACM-ICPC International Collegiate Programming Contest (区域赛报名)

欢迎访问ACM-ICPC中国区竞赛指导委员会网站 (中国赛区官网)

ACM/ICPC信息站 - ACMer的信息平台

网络赛实时学校排名 

ACM2014中文队伍信息注册与名额申请

ACMer 博客瀑布流 | Blog Flow for ACMers

蓝桥杯大赛主页

Google 翻译

维基百科,自由的百科全书

Welcome - OeisWiki (在线数列索引)

数值计算图像积分

历年现场赛信息及Board

NEERC

数学中国 (数学建模)

几款免费流程图制作软件 | 佳人

一个在线流程图制作网站

小木虫论坛 - 学术科研第一站


常去的博客:

ACM学习小记 - 将狼踩尽 19891101 - 博客园

Matrix67: My Blog

kuangbin - 博客园

窝是爱酱,喵~~~~ - 博客频道 - CSDN.NET (cxlove)

Only the Strong Survive - 博客频道 - CSDN.NET

ural 数学及dp - 我待程序如初见、、、 - 博客频道 - CSDN.NET


常用OJ

Hust - Virtual Judge

HDU

Poj

OpenJudge - PKU Online Judge - 北京大学在线评测系统 - 首页

LightOJ

ACdream Online Judge

码酷

在线测评管理系统

ZSTU oj  (29页零起点算法)

BUAA

BNUoj

Vijos

RQNOJ

大视野在线测评

HIT ACM/ICPC Group - Online Judge

SGU

ZZULI oj

华电电力大学ACM俱乐部 - ACM俱乐部一让程序测评系统更加简单、实用

Contest Hunter

nyist

FZU

CSU Online Judge

Welcome to NUDT Online Judge

山东理工ACM主页

一场比赛没事刷题玩

<think>嗯,用户想了解在线评测系统(OJ)中常用的Java数据结构,特别是编程竞赛相关的。首先,我需要回忆一下OJ系统的特点和编程竞赛中的常见问题类型。通常OJ题目会涉及算法效率,所以数据结构的选择很关键。 首先,基础的数据结构肯定是必须的,比如数组、字符串这些。Java里的数组和String类用得很多,特别是StringBuilder在处理字符串拼接时效率更高,避免频繁创建对象。这点应该要提到。 然后是集合框架里的List,比如ArrayList和LinkedList。ArrayList的随机访问快,适合查找多的场景,而LinkedList在频繁插入删除时更好,比如链表相关的题目。不过实际编程竞赛中可能更多用ArrayList,因为大部分情况下访问更频繁。 队列和栈在OJ题里也很常见,比如BFS用队列,DFS用栈或者递归。Java中的Queue可以用LinkedList实现,还有Deque双端队列,可能用来做滑动窗口或者双向BFS。栈的话一般用Deque来模拟,因为Java的Stack类已经不推荐使用了。 接下来是Set和Map,HashSet和HashMap用于快速查找和去重,TreeSet和TreeMap在需要有序的情况下使用。比如判断元素是否存在,或者统计频率,这些结构很常用。不过要注意哈希表的冲突问题,可能会影响性能,但在编程竞赛中数据规模通常可控。 优先队列,也就是堆,PriorityQueue,处理贪心算法或者Top K问题,比如Dijkstra算法里会用到。需要提醒用户注意比较器的使用,自定义排序规则。 高级数据结构比如并查集,处理连通性问题,虽然Java标准库没有内置,但可以自己实现。还有树状数组和线段树,用于区间查询和更新,这些在处理区间问题时很高效,比如区间求和、最大值等。 字符串处理相关的字典树,可能用于前缀匹配,不过实际题目中可能相对较少,但如果有的话需要自己实现节点结构。 然后,用户可能想知道在OJ中使用这些数据结构的注意事项。比如输入输出效率,Java的Scanner比较慢,用BufferedReader更好。内存管理方面,避免频繁创建对象,防止超限。还有数据规模的问题,根据题目选择合适复杂度的结构。 最后,可能需要给出一些例子,比如用ArrayList处理动态数组,HashMap统计频率,PriorityQueue解决Top K问题,并查集处理朋友圈问题等。这些例子能帮助用户更好地理解应用场景。 需要确保回答的结构清晰,分点列出常用结构,每个结构的特性和应用场景,以及注意事项。同时要引用提供的资料,比如引用[1]提到OJ系统涵盖数据结构等核心知识点,引用[2]关于Java的编译处理,可能涉及数据结构的实现。可能还要提到引用[3]中的私有训练题目提交情况,但不确定是否相关,可能不需要。 检查是否有遗漏的结构,比如图结构通常用邻接表或矩阵表示,但Java中可以用List<List<Integer>>来表示邻接表。另外,位操作相关的结构比如BitSet,可能在处理位掩时有用,不过可能属于较高级的应用,根据用户的问题层次决定是否包含。 总之,整理这些数据结构,分基础、集合框架、高级结构,注意事项,示例应用,相关问题,确保覆盖全面,符合用户需求。</think>### 在线评测系统(OJ)中常用的Java数据结构 在线评测系统(OJ)的编程竞赛题目通常涉及高效算法实现,而数据结构的选择直接影响代性能和解题效率。以下是Java中常用的数据结构及其应用场景: --- #### 一、基础数据结构 1. **数组(Array)** - 特性:固定大小,内存连续,支持随机访问($O(1)$时间复杂度) - 应用:静态数据存储、矩阵运算、动态规划 - Java实现:`int[] arr = new int[10];` 2. **字符串(String)** - 特性:不可变性,适合频繁读取但需注意拼接效率 - 优化:使用`StringBuilder`或`StringBuffer`进行动态修改($O(n)$拼接复杂度) - 示例:回文判断、子串匹配 --- #### 二、集合框架核心类 3. **List接口** - **`ArrayList`** - 动态数组,支持快速随机访问($O(1)$),插入/删除尾部高效($O(1)$),中间操作低效($O(n)$) - 应用:需要频繁按索引访问的场景 - **`LinkedList`** - 双向链表,插入/删除高效($O(1)$),但随机访问慢($O(n)$) - 应用:队列、栈的实现,或需要频繁中间修改的场景 4. **Queue/Deque接口** - **`LinkedList`实现队列** - 示例:BFS(广度优先搜索)中的层级遍历 - **`PriorityQueue`** - 基于堆实现,支持$O(\log n)$插入和$O(1)$获取最值 - 应用:贪心算法、Top K问题 - **`ArrayDeque`** - 双端队列,适合滑动窗口或双向BFS 5. **Set接口** - **`HashSet`** - 哈希表实现,$O(1)$查找/插入,用于去重或快速存在性判断 - **`TreeSet`** - 红黑树实现,有序集合,支持$O(\log n)$查找和范围查询 6. **Map接口** - **`HashMap`** - 哈希表存储键值对,$O(1)$时间复杂度,适合频率统计、缓存 - **`TreeMap`** - 基于红黑树,键有序,支持范围查询(如第一个大于某值的键) --- #### 三、高级数据结构(需手动实现) 7. **并查集(Disjoint Set Union, DSU)** - 功能:高效处理连通性问题($O(\alpha(n))$近似常数时间) - 应用:图的连通分量、朋友圈问题 - 示例代: ```java class DSU { int[] parent; public DSU(int n) { parent = new int[n]; Arrays.setAll(parent, i -> i); } int find(int x) { return parent[x] = (parent[x] == x) ? x : find(parent[x]); } void union(int x, int y) { parent[find(x)] = find(y); } } ``` 8. **树状数组(Fenwick Tree)** - 功能:高效单点更新和前缀查询($O(\log n)$) - 应用:动态频率统计、逆序对计数 9. **线段树(Segment Tree)** - 功能:区间查询与更新($O(\log n)$) - 应用:区间最值、区间和 10. **字典树(Trie)** - 功能:高效存储和检索字符串集合 - 应用:前缀匹配、词频统计 --- #### 四、OJ中数据结构的注意事项 1. **输入输出效率** - 使用`BufferedReader`替代`Scanner`以减少I/O耗时[^2]。 2. **内存管理** - 避免频繁创建对象(如循环内`new ArrayList<>()`),防止内存超限。 3. **数据规模与复杂度** - 根据题目限制选择合适结构(如$n \leq 10^5$时需$O(n \log n)$算法)。 --- #### 五、示例应用场景 - **动态数组**:`ArrayList`处理不确定长度的输入数据。 - **频率统计**:`HashMap`统计字符出现次数。 - **最值问题**:`PriorityQueue`解决合并K个有序链表。 - **连通性**:并查集处理社交网络关系[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值