链接:https://ac.nowcoder.com/acm/contest/54098/E 来源:牛客网 现给你两个严格递增且长度分别为n和m的序列:a = (a1,a2,a3,...,an)和 b = (b1,b2,b3,...,bm)。 请你将a,b组合成新的序列c,并保证序列c是递增的。 请你分别输出a中的数在c中的索引,b中的数在c中的索引。
时间: 2023-05-25 10:06:57 浏览: 61
题目描述
现给你两个严格递增且长度分别为 $n$ 和 $m$ 的序列:$a=(a1,a2,a3,...,an)$ 和 $b=(b1,b2,b3,...,bm)$。请你将 $a$,$b$ 组合成新的序列 $c$,并保证序列 $c$ 是递增的。请你分别输出 $a$ 中的数在 $c$ 中的索引,$b$ 中的数在 $c$ 中的索引。
输入格式
第一行包含一个整数 $n$。
第二行包含 $n$ 个整数 $a1,a2,a3,…,an$,表示序列 $a$ 中的元素。
第三行包含一个整数 $m$。
第四行包含 $m$ 个整数 $b1,b2,b3,…,bm$,表示序列 $b$ 中的元素。
保证 $1≤n,m≤100000,1≤ai,bi≤10^9$。
输出格式
共两行,每行包含 $n$ 个整数,表示a中的每个元素在c中的位置,第二行表示b中的每个元素在c中的位置。
注意,答案中的位置均从 $1$ 开始编号。
样例
输入样例:
5
1 3 5 7 9
3
2 3 6
输出样例:
1 2 3 4 5
0 1 0 0 0
提示
样例解释
序列 $c$ 为 (1,2,3,3,5,6,7,9),对于 $a$ 中的元素,1 在 $c$ 中的位置为 1,3 在 $c$ 中的位置为 2,5 在 $c$ 中的位置为 3,7 在 $c$ 中的位置为 4,9 在 $c$ 中的位置为 5,因此输出为 (1 2 3 4 5)。
对于 $b$ 中的元素,2 在 $c$ 中没有出现,3 在 $c$ 中的位置为 2,6 在 $c$ 中的位置为 5,因此输出为 (0 1 0 0 0)。
相关问题
链接:https://ac.nowcoder.com/acm/contest/68233/B 来源:牛客网 输入三个整数,求以下三数的和, 1+2+...+a + 12+22+...+b2 + 1/1+1/2+...+1/c
这道题目需要求解的是一个数学问题,需要对题目进行分析。首先,我们可以将题目中的三个数列分别求和,得到1到a的和、12到b的平方和以及1到1/c的倒数和。接下来,我们需要根据引用[3]中的思路,从中任取两场比赛,对满足和各出现一次的做统计,结果数即为(a-1)*(b-1)*(c-1)。最终答案就是三个数列的和乘以结果数。具体的计算过程可以参考下面的公式:
sum = (a*(a+1))/2 + (b*(b+1)*(2*b+1))/6 + (1/((double)c)*(1+(1/((double)c-1)))) * (a-1)*(b-1)*(c-1);
其中,(a*(a+1))/2表示1到a的和,(b*(b+1)*(2*b+1))/6表示12到b的平方和,(1/((double)c)*(1+(1/((double)c-1))))表示1到1/c的倒数和,(a-1)*(b-1)*(c-1)表示结果数。
链接:https://ac.nowcoder.com/acm/contest/59840/K 来源:牛客网 给定 n 个坐标,求其中 3 个坐标能表示一个等腰三角形的组数。 三点共线不算三角形,等边三角形为特殊的等腰三角形。
对于这道题,我们可以考虑对输入的每两个点求出它们的中点,然后把这个中点作为哈希表的键值,值为一个列表,存储所有能与该中点构成等腰三角形的点。具体做法如下:
1. 枚举每两个点,计算它们的中点,把该中点作为哈希表的键值,值为一个空列表。
2. 遍历所有点,如果该点与中点的距离等于某个已有中点的距离,则将该点加入到对应的列表中。
3. 对于每个中点对应的列表,如果列表长度大于等于2,则说明存在能与该中点构成等腰三角形的点,计算组合数并累加到答案中。
时间复杂度为 $O(n^2 \log n)$,其中 $n$ 为点的个数。具体实现细节可以参考下面的代码:
```python
from collections import defaultdict
import math
n = int(input())
points = []
for i in range(n):
x, y = map(int, input().split())
points.append((x, y))
# 计算两点之间的距离
def dist(p1, p2):
return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2)
# 构建哈希表
hash_map = defaultdict(list)
for i in range(n):
for j in range(i + 1, n):
p1, p2 = points[i], points[j]
mid = ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)
hash_map[mid] = []
# 遍历所有点
for i in range(n):
for j in range(i + 1, n):
p1, p2 = points[i], points[j]
mid = ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)
for k in range(n):
if k != i and k != j:
p3 = points[k]
d1, d2 = dist(p1, p3), dist(p2, p3)
if abs(d1 - d2) < 1e-6:
hash_map[mid].append(p3)
# 计算答案
ans = 0
for mid, points in hash_map.items():
if len(points) >= 2:
n = len(points)
ans += n * (n - 1) // 2
print(ans)
```