| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> UVA1152 4 Values whose Sum is 0 题解 -> 正文阅读 |
|
[数据结构与算法]UVA1152 4 Values whose Sum is 0 题解 |
UVA1152 4 Values whose Sum is 0题目链接:UVA1152 4 Values whose Sum is 0
解法一O ( n 4 ) O(n^4) O(n4) 枚举肯定过不去 想一想,我们有必要在枚举 i , j i,j i,j 的时候再去枚举 k , l k,l k,l 吗? 没有,因为 k , l k,l k,l 的组合是有限的,只有这么多 我们可以先 O ( n 2 ) O(n^2) O(n2) 把所有 c k + d l c_k+d_l ck?+dl? 枚举出来,然后排个序,就可以二分找出所有的 ? ( a i + b j ) -(a_i+b_j) ?(ai?+bj?) 了 时间复杂度 O ( n 2 log ? n 2 ) O(n^2\log n^2) O(n2logn2) 代码如下
解法二通过刚才的分析,我们会惊奇的发现这个 i , j i,j i,j 的组合其实是有限的! 那么我们就可以预处理所有的 a i + b j a_i+b_j ai?+bj? 和 c k + d l c_k+d_l ck?+dl? 然后用哈希表搞一搞,每次去暴力查表(注:查有没有相反数) 时间复杂度 O ( n 2 ) O(n^2) O(n2) 真的有这么简单吗? 我们来重新分析一下时间复杂度 首先题目中说明给的数小于等于 2 28 2^{28} 228 那么每个组合(和)小于 2 29 2^{29} 229 如果用哈希表搞,理论上来说可以构造hack数据,特别是简单的哈希函数很容易hack 为什么?因为如果哈希函数不是很好,那么至多在一个位置放了 n 2 n^2 n2 个数
什么你要表内排序? O ( n 2 log ? n 2 ) O(n^2\log n^2) O(n2logn2)? + 可能较大常数 (来自本文作者的奇思妙想) 所以其实理论上来说这个解法是行不通的 如果数据生成器能够分析提交的代码原理并构造hack数据,那么直接玩完 好在没有那么恶心这题,数据比较简单,手写哈希表也能过 代码就不贴了,个人感觉实现很简单而且这解法不是很好 qwq 转载请说明出处 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:47:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |