@cff_0102 实在无法发现问题了……能不能发一下 SPJ 的实现方式啊(
报错信息:
Runtime Error.wrong answer 1-st run, subtest 1. The output number is not in the specified range (test case 1)
Program exited with code 3.
代码:
#include <bits/stdc++.h>
using namespace std;
#define vi vector<int>
#define eb emplace_back
#define rep(i, l, r) for (int i(l), i##End(r); i <= i##End; i = -~i)
#define N 300005
int n, m;
int a[N], b[N];
map<int, int> mp;
vi Encode(int n, int m, vi T){
// 加密过程
mp.clear();
assert(m == (int)T.size());
rep(i, 1, m) a[i] = T[i - 1];
sort(a + 1, a + m + 1);
rep(i, 1, m) mp[a[i]] = 1;
int t = 0;
rep(i, 1, m) {
t++;
int j = a[i] % n + 1;
mp[a[i]] = 2;
while (mp[j] != 1 && t) {
if (!mp[j]) mp[j] = 3, t--;
j = j % n + 1;
}
}
int k = 0;
for (auto [x, y] : mp) if (y == 3) b[++k] = x;
sort(b + 1, b + k + 1);
vi R;
rep(i, 1, k) R.eb(b[i]);
return R;
}
vi Decode(int n, int m, vi R){
// 解密过程
mp.clear();
assert(m == (int)R.size());
rep(i, 1, m) a[i] = R[i - 1];
rep(i, 1, m) a[i] = n - a[i] + 1;
sort(a + 1, a + m + 1);
rep(i, 1, m) mp[a[i]] = 1;
int t = 0;
rep(i, 1, m) {
t++;
int j = a[i] % n + 1;
mp[a[i]] = 2;
while (mp[j] != 1 && t) {
if (!mp[j]) mp[j] = 3, t--;
j = j % n + 1;
}
}
int k = 0;
for (auto [x, y] : mp) if (y == 3) b[++k] = n - x + 1;
sort(b + 1, b + k + 1);
vi T;
rep(i, 1, k) T.eb(b[i]);
return T;
}