酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

## 题目背景 [english statement](https://www.luogu.com.cn/problem/u517304). you must submit your code at the chinese version of the statement. ## 题目描述 给定一个长为 $n$ 的序列 $a_1, a_2,a_3, \dots ,a_n$,你需要执行 $k$ 次操作使这个序列为空。 每次操作可以执行下列内容之一: 1. 选择两个数 $i, j$,交换 $a_i, a_j$(需要满足 $1 \le i < j \le n$)。 2. 选择两个数 $i, j$,删除 $a_i,a_{i+1}, \dots ,a_j$(需要满足 $1 \le i \le j \le n$,且 $a_i = a_j$)。 请输出最小的操作数 $k$。 ## 输入格式 第一行输入一个正整数 $t$($1 \le t \le 5$),表示有 $t$ 个测试数据。 对于每个测试数据: 第一行输入一个正整数 $n$($1 \le n \le 10^5$),表示序列长度为 $n$。 第二行输入 $n$ 个正整数 $a_1,a_2 \dots a_n$($0 \le a_i \le 10^9$)。 ## 输出格式 对于每个测试数据输出一个正整数 $k$,表示最少的操作次数。 ## 样例 #1 ### 样例输入 #1 ``` 2 5 1 2 3 2 3 3 1000000000 1000000000 99999999 ``` ### 样例输出 #1 ``` 2 2 ``` ## 提示 ### 数据范围 | 子任务 | 分值 | 限制 | | :----------: | :----------: | :----------: | | $1$ | $10$ | $n\le 3$ | | $2$ | $20$ | $n\le 10$ | | $3$ | $20$ | $a_i\le 2$ | | $4$ | $10$ | 保证所有 $a_i$ 相等 | | $5$ | $40$ | - | 对于 $100\%$ 的数据,$1\le t \le 5$,$1\le n\

```python import math def min_operations(n, a): # 存储数字及其出现次数 num_count = {} for num in a: if num in num_count: num_count[num] += 1 else: num_count[num] = 1 operation_count = 0 # 处理可直接删除的相同数字段 for num, count in num_count.items(): if count > 1: start = -1 for i in range(n): if a[i] == num and start == -1: start = i elif a[i]!= num and start!= -1: if i - start >= 2: operation_count += 1 start = -1 # 对剩余数字进行交换操作 sorted_a = sorted(a) for i in range(n): if a[i]!= sorted_a[i]: for j in range(i + 1, n): if a[j] == sorted_a[i]: a[i], a[j] = a[j], a[i] operation_count += 1 break return operation_count t = int(input()) for _ in range(t): n = int(input()) a = list(map(int, input().split())) print(min_operations(n, a)) ``` 1. 注意输入数据的范围,尤其是序列长度 `n` 和数字的取值范围。 2. 对于处理相同数字段删除操作时,要准确判断起始和结束位置。 3. 交换数字的操作要确保能找到合适的位置进行交换。 [2024-12-21 15:27:24 | AI写代码神器 | 372点数解答]

相关提问