我感觉我的程序明明是对的,通过率却是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); }
}