351E. Jeff and Permutation
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了351E. Jeff and Permutation相关的知识,希望对你有一定的参考价值。
题意:
一个长度为n的序列,你可以选择一些位置,使其变成相反数,问逆序对最少是多少?
题解:
对于第i位,我们开始考虑他能决定的逆序对?对于其他任意位置j,只有abs(a[i])>abs(a[j])的时候,他才会有决定作用
现在我们考虑i的左侧比他绝对值小的数有tot1个,右侧有tot2个,当i为正时会与右侧的数组成逆序对,为负时会与左侧的数组成逆序对,所以我们就看tot1和tot2谁小,决定了i的正负取值
代码:
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 2005;
int n, a[N], tot1, tot2, ans;
int read() {
int x = 0, f = 1; char s;
while((s = getchar()) > '9' || s < '0') if(s == '-') f = -1;
while(s >= '0' && s <= '9') x = (x << 1) + (x << 3) + (s ^ 48), s = getchar();
return x * f;
}
int main() {
n = read();
for(int i = 1; i <= n; ++ i) a[i] = read(), a[i] = abs(a[i]);
for(int i = 1; i <= n; ++ i) {
tot1 = tot2 = 0;
for(int j = 1; j < i; ++ j) if(a[j] < a[i]) ++ tot1;
for(int j = i + 1; j <= n; ++ j) if(a[j] < a[i]) ++ tot2;
ans += min(tot1, tot2);
}
printf("%d\\n", ans);
return 0;
}
以上是关于351E. Jeff and Permutation的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 351C Jeff and Brackets 矩阵优化DP
CF&&CC百套计划3 Codeforces Round #204 (Div. 1) A. Jeff and Rounding
CF&&CC百套计划3 Codeforces Round #204 (Div. 1) D. Jeff and Removing Periods