solution.md 1.8 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2
# 压缩变换

3 4 5

**问题描述**

每日一练社区's avatar
每日一练社区 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19
小明最近在研究压缩算法。  
他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。  
然而,要使数值很小是一个挑战。  
最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面出现的数字很大可能是刚出现过不久的数字。对于这种特殊的序列,小明准备对序列做一个变换来减小数字的值。  
变换的过程如下:  
从左到右枚举序列,每枚举到一个数字,如果这个数字没有出现过,刚将数字变换成它的相反数,如果数字出现过,则看它在原序列中最后的一次出现后面(且在当前数前面)出现了几种数字,用这个种类数替换原来的数字。  
比如,序列(a1, a2, a3, a4, a5)=(1, 2, 2, 1, 2)在变换过程为:  
a1: 1未出现过,所以a1变为-1;  
a2: 2未出现过,所以a2变为-2;  
a3: 2出现过,最后一次为原序列的a2,在a2后、a3前有0种数字,所以a3变为0;  
a4: 1出现过,最后一次为原序列的a1,在a1后、a4前有1种数字,所以a4变为1;  
a5: 2出现过,最后一次为原序列的a3,在a3后、a5前有1种数字,所以a5变为1。  
现在,给出原序列,请问,按这种变换规则变换后的序列是什么。  

20 21 22

**输入**

每日一练社区's avatar
每日一练社区 已提交
23 24 25
输入第一行包含一个整数n,表示序列的长度。  
第二行包含n个正整数,表示输入序列。  

26 27 28

**输出**

每日一练社区's avatar
每日一练社区 已提交
29 30
输出一行,包含n个数,表示变换后的序列。  

31 32 33

**输入例子 1**

每日一练社区's avatar
每日一练社区 已提交
34 35 36 37
```
5
1 2 2 1 2
```
38 39 40

**输出例子 1**

每日一练社区's avatar
每日一练社区 已提交
41 42 43
```
-1 -2 0 1 1
```
44 45 46

**输入例子 2**

每日一练社区's avatar
每日一练社区 已提交
47 48 49
```
12
```
50 51 52

**输出例子 2**

每日一练社区's avatar
每日一练社区 已提交
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
```
-1 0 -2 -3 1 1 2 2 0 0 2 2
```

## aop

### before

```cpp

```

### after

```cpp

```

## 答案

```cpp

```

## 选项

### A

```cpp

```

### B

```cpp

```

### C

```cpp

```