CCF201909-2 小明种苹果(续)(java)

一世执手 提交于 2019-12-12 10:40:02

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
问题链接CCF201909-2 小明种苹果(续)
提交结果:(在超时的边缘……)
在这里插入图片描述
注意:若第44-45行条件为badtreeorder[i-2] == badtreeorder[i-1]
&& badtreeorder[i-1] == badtreeorder[i]
,若为若条件设为badtreeorder[i] == badtreeorder[i+1]&& badtreeorder[i+1] == badtreeorder[i+2] 将出错。

java代码

import java.util.Scanner;
/**
 * Main.注意考虑到边界情况与特殊情况
 * @author : cxc
 **/
public class Main {

  //超时如何处理?循环展开,减少分支语句
  public static void main(String[] args) {
    Scanner myin = new Scanner(System.in,"utf-8");
    int N = myin.nextInt();
    int sum = 0;//剩下所有果子
    //中间变量
    int[] expectnum = new int[N];
    int[] realnum = new int[N];

    int badtreenum = 0;//掉落苹果树的数量
    int threetreenum = 0;//连续三棵树掉落的组数
    int[] badtreeorder = new int[N];

    for(int i = 0;i < N;i++){
      int M = myin.nextInt();//操作的数目
      int treesum = myin.nextInt();//该树的果子数
      expectnum[i] = treesum;
      realnum[i] = treesum;
      int flag = 0;//标志是否掉落(1是,0不是)
      for(int j = 1;j < M;j++) {
        int temp = myin.nextInt();//第一个操作一定是统计苹果个数
        if (temp < 0) {
          expectnum[i] += temp;
          treesum += temp;
        }
        else if (temp > 0) {
          realnum[i] = temp;//调整当前苹果数目
          treesum = temp;
          if (flag == 0 && realnum[i] < expectnum[i]) {
            flag = 1;
          }
        }
      }
      sum += treesum;//总计每棵树果子数
      if(flag == 1){
        badtreeorder[i] = 1;//掉落苹果树
        if(i>1 && badtreeorder[i-2] == badtreeorder[i-1]
            && badtreeorder[i-1] == badtreeorder[i]){
          //注意赋值顺序,累积赋值,应该与前面的比较
          threetreenum++;
        }
        badtreenum++;
      }
    }
    if(badtreeorder[N-2] == badtreeorder[N-1]
        && badtreeorder[N-1] == badtreeorder[0]
        && badtreeorder[0] == 1){
      threetreenum++;
    }
    if(badtreeorder[N-1] == badtreeorder[0]
        && badtreeorder[0] == badtreeorder[1]
        && badtreeorder[0] == 1){
      threetreenum++;
    }
    System.out.printf("%d %d %d%n",sum, badtreenum ,threetreenum);
  }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!