代码学习总结(五)
代码学习总结(五)
这个系列的博客是记录下自己学习代码的历程,有来自平台上的,有来自笔试题回忆的,主要基于 C++ 语言,包括题目内容,代码实现,思路,并会注明题目难度,保证代码运行结果
1 小红的好数
简单
非退化三角形
快速匹配
小红定义一个数对 { x , y } \{x, y\} {x,y} 是一对“好数”,当且仅当 x , y , x ⊕ y x,\ y,\ x \oplus y x, y, x⊕y 这三个数能作为三条边,构成一个非退化的三角形。
现在小红拿到了一个数组 { a 1 , a 2 , ⋯ , a n } \{ a_1, a_2, \cdots , a_n \} {a1,a2,⋯,an},她希望你求出有多少对下标 ( i , j ) (i, j) (i,j) 满足 1 ≤ i < j ≤ n 1 ≤ i < j ≤ n 1≤i<j≤n,且对应的值 { a i , a j } \{ a_i,a_j \} {ai,aj} 是一对“好数”。
在这里, ⊕ \oplus ⊕ 表示位运算中的按位异或操作。
输入描述
第一行输入一个正整数 n \boldsymbol{n} n ,代表数组大小
第二行输入 n \boldsymbol{n} n 个正整数 a i \boldsymbol{a_i} ai,代表数组的元素
1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1≤n≤105
1 ≤ a i ≤ 1000 1 \leq a_i \leq 1000 1≤ai≤1000
输出描述
一个整数代表满足 { a i , a j } \{ a_i, a_j \} {ai,aj} 是好数的 ( i , j ) (i, j) (i,j) 对儿数。
示例输入输出 1:
输入:
4
2 3 4 5
输出:1
思路解析:
- 首先,非退化三角形是指,两边之和大于第三边的三角形
- 那么,就是直接对数组进行遍历,以三角不等式对给定的 2 个数字进行判断,是否符合定律,如果符合,好数对 +1
- 遍历完所有的情况后,输出结果