#248. [CFCOI Collection 2] Sequence Crypto

[CFCOI Collection 2] Sequence Crypto

注意

本题版权归 所有。

题目来源:https://www.luogu.com.cn/problem/T686510

题目在导入时有改动。

本题是通信题。

请务必严格按照提交方式进行操作!!!

题目描述

给定一个均匀随机生成的序列 {an} (n=105,1ai109)\{a_n\}\ (n = 10^5, 1 \le a_i \le 10^9),你需要对其进行加密传输:

  1. 程序 A 生成两个 1,2,,n+11, 2, \ldots, n + 1 的排列 x,yx, y
  2. 程序 A 生成两个正整数 X0,Y0 (1X0,Y0n)X_0, Y_0\ (1 \le X_0, Y_0 \le n)
  3. 程序 B 得到以如下方式加密的序列 {an}\{a_n\}
    • 定义序列 {bn}\{b_n\} 初始等于 {an}\{a_n\}
    • X0X_0 替换排列 xx 中等于 n+1n + 1 的项。
    • Y0Y_0 替换排列 yy 中等于 n+1n + 1 的项。
    • 升序枚举 i=1,2,,n+1i = 1, 2, \ldots, n + 1,将 byib_{y_i} 减去 axia_{x_i}
    • 枚举结束后的 {bn} (2×109bn109)\{b_n\}\ (-2 \times 10^9 \le b_n \le 10^9) 即为加密后的序列。
  4. 程序 B 需要还原序列 {an}\{a_n\}

提交方式

程序 A 模板

程序 A 需要读入:

  • 第一行一个正整数 nn
  • 第二行 nn 个正整数 {an}\{a_n\}

程序 A 需要输出:

  • 第一行两个正整数 X0,Y0X_0, Y_0
  • 第二行一个 1,2,,n+11, 2, \ldots, n + 1 的排列 xx
  • 第三行一个 1,2,,n+11, 2, \ldots, n + 1 的排列 yy
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 12;
int a[N], x[N], y[N];
int main()
{
	int n, X0 = 1, Y0 = 1;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int i = 1; i <= n + 1; i++)
		x[i] = y[i] = i;
	// ...
	cout << X0 << ' ' << Y0 << endl;
	for (int i = 1; i <= n; i++)
		cout << x[i] << ' ';
	cout << x[n + 1] << endl;
	for (int i = 1; i <= n; i++)
		cout << y[i] << ' ';
	cout << y[n + 1] << endl;
	return 0;
}

程序 B 模板

程序 B 需要读入:

  • 第一行一个正整数 nn
  • 第二行 nn 个整数 {bn}\{b_n\}

程序 B 需要输出:

  • 一行 nn 个正整数 {an}\{a_n\}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 12;
int a[N], b[N];
int main()
{
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> b[i];
	// ...
	for (int i = 1; i <= n - 1; i++)
		cout << a[i] << ' ';
	cout << a[n] << endl;
	return 0;
}

总模板

请将你已经完成的程序 A 和程序 B 粘贴到下面模板中的指定位置,然后直接提交源代码。

// Paste your Program A here

/* ATTENTION!!! THIS IS THE BARRIER!!! */

// Paste your Program B here

注意事项

  1. 请务必使用以上模板,否则后果自负!!!
  2. 严禁攻击评测程序,否则按作弊处理!!!
  3. 你提交的源代码不得超过 10001000 行,总长度不得大于 10510^5 字节。
  4. 我们编译你的代码时,所使用的编译参数为 -O2 -std=c++14
  5. 本题的时间限制为 11 秒,空间限制为 512 MB,且均对两个程序分开计算。