NC215119. CoolCool的序列
描述
输入描述
一个整数N,代表序列的长度,(1<=N<=100000)接下来N个整数代表序列s,1<=a_i <= N
输出描述
oxy的最小花费~
示例1
输入:
4 1 2 3 4
输出:
4
说明:
翻转之后t = {4,3,2,1},只需要交换1 4 与 2 3 便可得到 4 3 2 1,花费为4示例2
输入:
5 1 1 2 3 1
输出:
2
说明:
C++(clang++11) 解法, 执行用时: 102ms, 内存消耗: 68600K, 提交时间: 2021-04-10 10:47:59
#include<bits/stdc++.h> using namespace std; int a[1000005]; queue<int>que[100005]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; que[a[i]].push(i); } long long int ans=0; for(int i=n;i>=1;i--){ ans+=abs(que[a[i]].front()+i-n-1); que[a[i]].pop(); } cout<<ans/2; }
Python3(3.9) 解法, 执行用时: 222ms, 内存消耗: 20832K, 提交时间: 2021-02-02 10:42:15
n = int(input()) a = list(map(int, input().split())) pos = [list() for _ in range(n + 1)] for i in range(n): pos[a[i]].append(i) ans = 0 for i in pos: j = [n - 1 - k for k in i][::-1] for k in range(len(i)): ans += abs(i[k] - j[k]) print(ans // 2)