CCF-CSP 201909-2 Apple Xiaoming (continuación)

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

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;
}
Publicados 111 artículos originales · ganado elogios 2 · Vistas 3533

Supongo que te gusta

Origin blog.csdn.net/m0_38088647/article/details/101393686
Recomendado
Clasificación