求大佬给看看,最后一个用例过不了,球球了!
查看原帖
求大佬给看看,最后一个用例过不了,球球了!
735623
little_fish_aaaa楼主2022/11/20 18:00
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXN 32767
typedef struct {
    int t, v;
} Node;

int g_n; // 天数
Node g_data[MAXN];

static int Cmp(void *a, void *b)
{
    Node *pre = (Node*)a;
    Node *next = (Node*)b;
    return pre->v - next->v;
}

static int Min(int a, int b)
{
    if (a < b) {
        return a;
    }
    return b;
}

static int FindMinDiff(int ind) // 找到最小的差值,t==0时,差值就是这个数本身
{
    if (g_data[ind].t == 0) {
        return abs(g_data[ind].v);
    }

    int ret = 0x3f3f3f3f;
    int l = ind - 1, r = ind + 1;
    for (; l >= 0; l--) {
        if (g_data[l].t < g_data[ind].t) {
            break;
        }
    }
    if (l >= 0) {
        ret = abs(g_data[l].v - g_data[ind].v);
    }

    for (; r < g_n; r++) {
        if (g_data[r].t < g_data[ind].t) {
            break;
        }
    }
    if (r < g_n) {
        ret = Min(ret, abs(g_data[r].v - g_data[ind].v));
    }

    return ret;
}

int main()
{
    scanf("%d", &g_n);
    for (int i = 0; i < g_n; i++) {
        scanf("%d", &(g_data[i].v));
        g_data[i].t = i;
    }
    qsort(g_data, g_n, sizeof(Node), Cmp);

    int ans = 0;
    for (int i = 0; i < g_n; i++) {
        ans = ans + FindMinDiff(i);
    }
    printf("%d\n", ans);

    return 0;
}
2022/11/20 18:00
加载中...