#1444. 一维数组作为参数

一维数组作为参数

Background

数组名作为函数的实参

实质是地址的传递,将数组的首地址传给形参,形参和实参共用同一存储空间,形参的变化就是实参的变化。并且注意。

把数组作为参数时,一般不指定数组的大小,即使指定,也会被忽略。具体语法原因暂不解释,可以先记住。

#include <bits/stdc++.h>
using namespace std;
int a[15], b[15], c[15], n;
void change(int a[], int c) 
{
    for (int i = 1; i <= n; i++) a[i] += c;
    // 会实际修改这个数组。
    return;
}
int main()
{
     cin >> n;
     change(a, 1);
     change(b, 1);
     change(c, 1);
     cout << a[1] << " " << b[1] << " " << c[1];
}

Description

给定三个序列分别为 a,b,ca,b,c 它们的长度分别为 x,y,zx,y,z

qq 次操作,每次操作分为三种类型。

  • aa 序列的第 1x1\sim x 个数字都加 vv
  • bb 序列的第 1y1\sim y 个数字都加 vv
  • cc 序列的第 1z1\sim z 个数字都加 vv

最后输出每个序列的最终结果。

Format

Input

第一行输入一个数字 xx

接下来一行输入 xx 个空格隔开的数字分别代表 a1,a2,,axa_1,a_2,\cdots,a_x

第三行输入一个数字 yy

接下来一行输入 yy 个空格隔开的数字分别代表 b1,b2,,byb_1,b_2,\cdots,b_y

第五行输入一个数字 zz

接下来一行输入 zz 个空格隔开的数字分别代表 c1,c2,,czc_1,c_2,\cdots,c_z

第七行输入一个数字 qq

接下来 qq 行,每行二个数字。

格式如 op v 所示,若 op=1op =1 代表给序列 aa 操作,op=2op=2 代表给序列 bb 操作,op=3op=3 代表给序列 cc 操作。

Output

输出一共输出三行

第一行是 xx 个数字,代表 a1,a2,,axa_1,a_2,\cdots,a_x

第二行是 yy 个数字,代表 b1,b2,,byb_1,b_2,\cdots,b_y

第三行是 zz 个数字,代表 c1,c2,,czc_1,c_2,\cdots,c_z

Samples

3
1 2 3
4 
1 2 3 4
5 
1 2 3 4 5
3
1 3
2 3
3 3
4 5 6
4 5 6 7
4 5 6 7 8

Sample 1 explain

序列 aa 初始为 a = [1, 2, 3]

序列 bb 初始为 b = [1, 2, 3, 4]

序列 cc 初始为 c = [1, 2, 3, 4, 5]

一共三次操作,可以看出三个操作分别让三个序列的所有位置的值都加了 33

因此操作结束后

a = [1 + 3, 2 + 3, 3 + 3] = [4, 5, 6]

b = [4, 5, 6, 7]

c = [4, 5, 6, 7, 8]

Limitation

1x,y,z10001\leq x,y,z\leq 1000

1ai,bi,ci10001\leq a_i,b_i,c_i\leq 1000

1q10001\leq q\leq 1000

op=1op = 1,满足 1l,rx1\leq l,r\leq x

op=2op = 2,满足 1l,ry1\leq l,r\leq y

op=3op = 3,满足 1l,rz1\leq l,r\leq z

1v10001\leq v\leq 1000