351E. Jeff and Permutation

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了351E. Jeff and Permutation相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

CF351B Jeff and Furik

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

CF352A Jeff and Digits

A. Jeff and Digits1000 / 构造