ccf_小明种苹果

T201909-2 : http://118.190.20.162/view.page?gpid=T93

测试样例
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
思路
73 -8 -6 59 -4,然后选定第一个73,往后遇到非正数,就加,73-8-6=59
遇到正数59,就替换成59,如果替换前的数值大于替换后,就 es == 1 表示掉落过
同时计算每棵树的 sum
最后再统计False出现的相邻情况即可
代码
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		
		int n = in.nextInt();  // n 棵树
		int [][] apples = new int[n+1][1000 + 7];
		long [] sum = new long[n];  // 记录当前这个树的个数
		long sum1 = 0; // 记录所有树的剩余总数
		long d = 0; // 掉落过的棵树
		int [] es = new int[n+2];  // 标记是否掉落过
		
		for (int i = 0; i < n; i++) {
			int m = in.nextInt();
			boolean f = true; // 防止同一颗树多次掉落
			for (int j = 0; j < m; j++) {
				apples[i][j] = in.nextInt();
				
				if(apples[i][j] <= 0) {
					sum[i] += apples[i][j];
				}else {
					if(j > 0 && sum[i] > apples[i][j] && f) {
						d++;
						es[i+1] = 1;
						f = false;   // 当前这棵树只标记一次就行了
					}
					// 每棵树的剩余总数
					sum[i] = apples[i][j];   
				}
			}
		}
		
		for (int i = 0; i < n; i++) {
			sum1 += sum[i];   // 所有树剩下的总数
		}

		/**
		 *  计算 相邻 3 个的数量
		 */
		long sum2 = 0;
		for(int i = 1; i <= n; i++)
	    {
	        if(es[i] == 1)
	        {
	            if(i==1 && es[n]  == 1&& es[i+1] == 1)
	                sum2++;
	            else if(i==n && es[i-1] == 1 && es[1] == 1)
	                sum2++;
	            else if(es[i-1] == 1 && es[i+1] == 1)
	                sum2++;
	        }
	    }
		
		System.out.print(sum1 + " " + d + " " + sum2);
	}
}

三个相邻的个数的计算

你可能感兴趣的:(冲冲冲,ccf,连续相邻的情况)