问题描述
试题编号: 201909-2
试题名称: 小明种苹果(续)
时间限制: 1.0s
内存限制: 512.0MB
image.png
image.png
image.png
第一次提交为50分,代码如下:
#include
using namespace std;
const int N = 1000;
int a[N+8][N+8];
int b[N+8],c[N+8];
int main(){
int n,i,j,num=0,sum=0,m=0;
scanf("%d",&n);
for(i=0;i
scanf("%d",&a[i][0]);
b[i]=0;
c[i]=0;
for(j=1;j<=a[i][0];j++){
scanf("%d",&a[i][j]);
if(a[i][j]>0){
if(a[i][j]
c[i]=-1;
num++;
}
b[i]=a[i][j];
}else{
b[i]+=a[i][j];
}
}
sum+=b[i];
}
if(c[0]==-1&&c[1]==-1&&c[n-1]==-1){
m++;
}
if(c[0]==-1&&c[n-2]==-1&&c[n-1]==-1){
m++;
}
for(i=1;i
if(c[i]==-1&&c[i-1]==-1&&c[i+1]==-1){
m++;
}
}
printf("%d %d %d\n",sum,num,m);
return 0;
}
/*
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
*/
推测错误原因:数组,可能测评机不支持宏定义。
真实原因:一棵树可能进行多次疏果,所以应将疏果操作放到外层循环进行判定,修改后得到满分,代码如下:
#include
#define N 1000
int a[N+8][N+8];
int b[N+8],c[N+8];
int main(){
int n,i,j,num=0,sum=0,m=0;
scanf("%d",&n);
for(i=0;i
scanf("%d",&a[i][0]);
b[i]=0;
c[i]=0;
for(j=1;j<=a[i][0];j++){
scanf("%d",&a[i][j]);
if(a[i][j]>0){
if(a[i][j]
c[i]=-1;
}
b[i]=a[i][j];
}else{
b[i]+=a[i][j];
}
}
sum+=b[i];
if(c[i]==-1){
num++;
}
}
if(c[0]==-1&&c[1]==-1&&c[n-1]==-1){
m++;
}
if(c[0]==-1&&c[n-2]==-1&&c[n-1]==-1){
m++;
}
for(i=1;i
if(c[i]==-1&&c[i-1]==-1&&c[i+1]==-1){
m++;
}
}
printf("%d %d %d\n",sum,num,m);
return 0;
}
/*
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
*/
这个题上次考试只做到了40分,还是有进步的。
第20天打卡,时间管理王者,fighting。还有10天左右就放假了,加油。继续学习算法。
附官网链接:http://www.cspro.org/