这个用例对了,但是全部WA
查看原帖
这个用例对了,但是全部WA
1504757
ACMyGo楼主2024/12/14 12:53

将左脑和右脑单独去看,任务由大到小分配,下面有一个举例,想知道为什么错了(测试的用例明明也没错(小声)

eg: 5 4 9 5 2 6 排序 9 6 5 4 2 左右分配为 左:9 4 右:6 5 2 返回13 (先把9分配给左脑,然后右脑分配6 此时右脑任务量小于左脑,把4分配给右脑 之后右脑任务量大于左脑,将下一个任务分配给左脑 以此类推,最终返回较大的数)

下面是代码部分

//P2392 kkksc03考前临时抱佛脚
#include<stdio.h>
#include<stdlib.h>

void soft(int* arr,int len) {//给数组从大到小排序,因为数据量不大,用了冒泡
	for (int i = 0; i < len; i++) {
		for (int j = 0; j <len-1- i; j++) {
			if (arr[j] < arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}
int js(int* arr,int len) {//核心部分,计算单个的最短时间
	int ans[2] = {0};
	for (int i = 0; i < len; i++) {
		if (ans[0] > ans[1]) ans[1] += arr[i];	//如果左脑用时大于右脑,任务安排给右脑
		else ans[0] += arr[i];					//反之安排给左脑
	}
	return ans[0] > ans[1] ? ans[0] : ans[1];	//返回较大的用时
}


int main() {
	int s[4],fans=0;
	for (int i = 0; i < 4; i++) scanf("%d", s + i);

	for (int i = 0; i < 4; i++) {
		int* nums = malloc(sizeof(int) * s[i]);
		for (int j = 0; j < s[i]; j++) {
			scanf("%d", nums + j);
		}
		soft(nums,s[i]);//给数组进行从大到小的排序

		fans += js(nums, s[i]);//计算结束后进行累加整合
	}

	printf("%d\n", fans);

	return 0;
}
2024/12/14 12:53
加载中...