救命!!!为什么样例和自己造的几个数据都过了,但提交后还是全红
查看原帖
救命!!!为什么样例和自己造的几个数据都过了,但提交后还是全红
824718
xingyeyoumeng楼主2024/4/8 22:19

花了好长时间都没看出bug

#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int all_time = 0;
int recursion(int start,int L,int a[])
{
    if(start >= L) return 0;

    int min_num;
    //start认为是右脑要做的题
    //next代表要做的下一道题,认为是左脑要做的题
    int next = start+1;
    //当next<L时说明还有题没做,a[next]=0说明已经做过了。
    while(a[next] == 0&&next < L) next++;
    //如果左脑要做的题已经超出范围,就直接加上右脑做题的时间
    if(next >= L) all_time += a[start];
    else
    {
        //找出要做的两道题中要花费时间最少的
        min_num = min(a[start],a[next]);
        all_time += min_num;
        //经过这段时间后更新两道题的剩余时间
        a[start] -= min_num;
        a[next] -= min_num;
        //更新后的时间有三种情况:
        //1.右脑做的题时间还有剩。2.左脑做的题时间还有剩 3.两个题都做完了
        if(a[start] != 0) recursion(start,L,a);
        else if(a[next] != 0) recursion(next,L,a);
        else if(a[start] == 0 && a[next] == 0)recursion(next+1,L,a);
    }
    return all_time;
}

int main()
{
    int s[4];
    int i;
    for(i = 0;i<4;i++)
    {
        cin >> s[i];
    }
    int T = 0;
    while(T < 4)
    {
        int* a = (int*)malloc(sizeof(int)*s[T]);
        int j;
        for(j = 0;j<s[T];j++)
        {
            cin >> a[j];
        }
        if(s[T] == 1) all_time +=a[0],T++;
        else
        {
            recursion(0,s[T],a);
            T++;
        }
        free(a);
    }
    cout << all_time << endl;

    return 0;
}
2024/4/8 22:19
加载中...