链接: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 20:06:57 浏览: 36
题目描述
现给你两个严格递增且长度分别为 $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/53284/J 来源:牛客网 给你一个M*N的网格,用红绿蓝(RGB)三种颜色填充,使得任意两个相邻的格子(上下左右四个方向相邻)颜色不同,请问总共有多少种不同的涂色方案?
这是一个经典的图论问题,可以使用染色法来解决。具体来说,我们可以从任意一个格子开始,将其染成红色,然后将其相邻的格子染成绿色,再将与绿色格子相邻的格子染成蓝色,以此类推。这样染色的过程中,每个格子的颜色都只与其相邻的格子有关,因此不会出现相邻格子颜色相同的情况。
根据染色法的思路,我们可以得到一个递推式:设f[i][j][k]表示第i行第j列的格子染成颜色k(k=0表示红色,k=1表示绿色,k=2表示蓝色)的涂色方案数,则有:
f[i][j][0] = f[i-1][j][1] + f[i-1][j][2] + f[i][j-1][1] + f[i][j-1][2]
f[i][j][1] = f[i-1][j][0] + f[i-1][j][2] + f[i][j-1][0] + f[i][j-1][2]
f[i][j][2] = f[i-1][j][0] + f[i-1][j][1] + f[i][j-1][0] + f[i][j-1][1]
其中,第一行和第一列的格子需要特殊处理,即:
f[1][j][0] = f[1][j-1][1] + f[1][j-1][2]
f[1][j][1] = f[1][j-1][0] + f[1][j-1][2]
f[1][j][2] = f[1][j-1][0] + f[1][j-1][1]
f[i][1][0] = f[i-1][1][1] + f[i-1][1][2]
f[i][1][1] = f[i-1][1][0] + f[i-1][1][2]
f[i][1][2] = f[i-1][1][0] + f[i-1][1][1]
最终的答案即为f[m][n][0] + f[m][n][1] + f[m][n][2]。
这个问题可以用动态规划来解决,具体实现可以参考以下代码:
int f[105][105][3];
int main() {
int m, n;
scanf("%d%d", &m, &n);
memset(f, 0, sizeof(f));
f[1][1][0] = f[1][1][1] = f[1][1][2] = 1;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (i == 1 && j == 1) continue;
f[i][j][0] = f[i-1][j][1] + f[i-1][j][2] + f[i][j-1][1] + f[i][j-1][2];
f[i][j][1] = f[i-1][j][0] + f[i-1][j][2] + f[i][j-1][0] + f[i][j-1][2];
f[i][j][2] = f[i-1][j][0] + f[i-1][j][1] + f[i][j-1][0] + f[i][j-1][1];
f[i][j][0] %= MOD;
f[i][j][1] %= MOD;
f[i][j][2] %= MOD;
}
}
printf("%d\n", (f[m][n][0] + f[m][n][1] + f[m][n][2]) % MOD);
return 0;
}
相关推荐










