90 分,第 1 数据答案错误
查看原帖
90 分,第 1 数据答案错误
70578
物灵楼主2021/5/21 01:24

提示信息为 “Wrong Answer. wrong answer On line 1 column 2, read 1, expected 0.”。

#include <stdio.h>
#define oxis 100001

long long int sum(const int *begin, const int *end)
{
        long long int result = 0;
        do result += *begin; while (++begin != end);
        return result;
}

int set_max(int *host, int guest)
{
        if (*host == guest) {
                return 0;
        } else if (*host < guest) {
                *host = guest;
                return 1;
        } else return -1;
}

int set_min(int *host, int guest)
{
        if (*host == guest) {
                return 0;
        } else if (*host > guest) {
                *host = guest;
                return 1;
        } else return -1;
}

int main(void)
{
        int n, i;
        long long int sum_ring_break_cost = 0;
        static int receiver[oxis], weight[oxis], receivee_chong[oxis];
        static int visited[oxis], max_receivee[oxis];
        scanf("%d", &n);

        for (i = 1; i <= n; ++i)
                scanf("%d%d", i + receiver, i + weight);
        for (i = 1; i <= n; ++i) {
                int cur = receiver[i];
                switch (set_max(max_receivee + cur, weight[i])) {
                case 1: receivee_chong[cur] = 0; break;
                case 0: receivee_chong[cur] = 1; break;
                }
        }
        for (i = 1; i <= n; ++i) {
                int cur, i0;
                for (cur = i; !visited[cur]; cur = receiver[cur])
                        visited[cur] = i;
                if (weight[cur] != max_receivee[receiver[cur]]
                    || receivee_chong[receiver[cur]]
                    || visited[cur] != i)       continue;
                int min_cur_break_cost = weight[cur], base = 1;
                for (i0 = receiver[cur]; i0 != cur; i0 = receiver[i0]) {
                        if (weight[i0] != max_receivee[receiver[i0]]
                            || receivee_chong[receiver[i0]])
                                goto no_more_a_ring;
                        ++base;
                        set_min(&min_cur_break_cost, weight[i0]);
                }
                if (base == n)                  return puts("0") == EOF;
                sum_ring_break_cost += min_cur_break_cost;
no_more_a_ring: ;
        }

        return !printf("%lld\n", sum(1 + weight, 1 + n + weight)
                       - sum(1 + max_receivee, 1 + n + max_receivee)
                       + sum_ring_break_cost);
}
2021/5/21 01:24
加载中...