Ideas para resolver problemas:
use una matriz de longitud n + 2 para registrar si un árbol ha caído manzanas. La razón para agregar 2 más que n es por el ciclo de simulación.
Es decir: gotas [0] = gotas [n]; gotas [1] = gotas [n + 1]; las
dos primeras y las dos últimas son iguales para simular el anillo.Resumen de la experiencia:
si un árbol se registra como un árbol caído, se puede registrar solo una vez, no varias veces. De lo contrario, cometerá errores. Solo obtuvo 50 puntos en el examen, pero no lo tuvo en cuenta.
Código C ++:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,m,D = 0,E = 0,T = 0;
scanf("%d",&n);
int drops[n+2] = {0};
for(int i=0; i<n; i++) {
int a,b;
bool flag_drop = true;
scanf("%d %d",&m,&a);
for(int j=1; j<m; j++) {
scanf("%d",&b);
if(b>0&&a!=b) {
if(flag_drop) { //注意这里一定要加个判断,某棵树掉落一次统计一次即可,多次统计会出现错误
drops[i+2] = 1;
D++; //如果多次统计掉落,D值会变大
}
a = b;
flag_drop = false;
} else if(b<=0) {
a += b;
}
}
T += a;
}
drops[0]=drops[n];
drops[1]=drops[n+1];
for(int i=1; i<n+1; i++) {
if(1 == drops[i-1] && 1 == drops[i] && 1 == drops[i+1]) {
E++;
}
}
printf("%d %d %d",T,D,E);
return 0;
}