神奇的问题,输入从全局数组改成全局变量就只有80分?求解
同样的代码,输入不用数组,只有80分,改成数组输入,就变成100分?问题 在哪里?
100分代码:(其他都不变,只把a从数组改成普通全局变量,就只有80分)
#include<bits/stdc++.h>
#define maxN 10005
#define gl 10080
#define maxtime 240
#define time 400
using namespace std;
long long n,a[maxN];
long long f[maxN],ans=0,tmp1=0,tmp2=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i]=f[i-1]+a[i];
if(a[i]>=maxtime&&ans==0) ans+=gl;
}
if(ans==gl) ans+=f[n]+time;
else{
tmp1=time+gl+f[n];
long long r=1,le=0;
while(r<=n){
if(f[r]-f[le]>=maxtime){
tmp2+=time;
le=r-1;
}
r++;
}
tmp2+=time+f[n];
ans=min(tmp1,tmp2);
}
printf("%lld",ans);
return 0;
} 80分代码: #include<bits/stdc++.h>
#define maxN 10005
#define gl 10080
#define maxtime 240
#define time 400
using namespace std;
long long n,a;
long long f[maxN],ans=0,tmp1=0,tmp2=0;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
f[i]=f[i-1]+a;
if(a>=maxtime&&ans==0) ans+=gl;
}
if(ans==gl) ans+=f[n]+time;
else{
tmp1=time+gl+f[n];
long long r=1,le=0;
while(r<=n){
if(f[r]-f[le]>=maxtime){
tmp2+=time;
le=r-1;
}
r++;
}
tmp2+=time+f[n];
ans=min(tmp1,tmp2);
}
printf("%lld",ans);
return 0;
}
查看10道真题和解析
