我感觉我的程序明明是对的,通过率却是0,这是为什么呢?

#include<stdio.h>#include<math.h>

#include<stdio.h>
#include<math.h>

long long Min(long long a,long long b)
{
    return a<b? a:b;
}
long long Max(long long a,long long b)
{
    return a>b? a:b;
}
long long slove(long long* RES, long long mid,long long N)
{
    long long i=0,k,sum,num;
    long long Res[100004];
   // Res=( long int*)malloc(N*sizeof(long int));
    for(i=0;i<N;i++)
    {
      Res[i]=RES[i];
    }

    for(i=0;i<N;i++)//小红的伤害
    {
        Res[i]-=mid;
        if(Res[i]<=0)
        {
            Res[i]=0;
        }
    }
    //队友二的伤害
    num=mid;
    for(i=0;i<N-1;i++)
    {
        if(Res[i]>0&&Res[i+1]>0)
        {
            k=Min(Res[i],Res[i+1]);
           if(num>=k)
           {
            Res[i]-=k;
            Res[i+1]-=k;
            num-=k;
           }
           else
           {
            Res[i]-=num;
            Res[i+1]-=num;
            num=0;
            break;
           }
        }

    }
    sum=0;
    for(i=0;i<N;i++)
    {
 //       printf("%d ",Res[i]);
        sum+=Res[i];
    }
 //   printf("回合%d   %d\n",mid,sum-num-mid);
    return  sum-num-mid;//总血量-队友2没打完的伤害-队友1的伤害

}
int main()
{
   long long n,i,mid,k;
   long long res[10004];
   long long down=0,opun=0;
   scanf("%d",&n);
   //res=(long int*)malloc(n*sizeof( long int));
   i=0;
   while(i<n)
    {
       scanf("%d",&res[i]);
        i++;
    }

   i=0;
   opun=res[0];
   while(i<n)
   {
       opun=Max(opun,res[i]);
      i++;
   }
    //printf("%d %d\n",opun,down);
    down=0;

    while(down<=opun)
    {
        mid=(down+opun)/2;//二分查找
        k=slove(res,mid,n);
        if(k<=0)
        {
            opun= mid-1;
        }
        else
        {
             down= mid+1;
        }
       //  printf("%d %d\n",opun,down);
    }
    printf("%d",down);

}


}

全部评论
考虑一下边界值 数据规模的问题。先看看能不能通过测试用例再说
点赞 回复 分享
发布于 2024-12-18 22:02 北京
自己测试几个样例,debug在循环的时候自己输出一下,看看循环怎么走
点赞 回复 分享
发布于 2024-12-18 21:12 江西

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务