csp试题2:小明种苹果(绪)

  • 题目
  • 分析
  • 代码
  • 总结

题目

题目描述
      小明在他的果园里种了一些苹果树,这些苹果树排列成一个圆。为了保证苹果的品质,在种植过程中要进行疏果操作。为了更及时地完成疏果操作,小明会不时地检查每棵树的状态,根据需要进行疏果。检查时,如果发现可能有苹果从树上掉落,小明会重新统计树上的苹果个数(然后根据之前的记录就可以判断是否有苹果掉落了)。在全部操作结束后,请帮助小明统计相关的信息。
输入格式
      从标准输入读入数据。
      第1行包含一个正整数N,表示苹果树的棵数。
      第1+i行(1<= i <= N),每行的格式为mi,ai1,ai2,…,aimi。其中,第一个正整数mi表示本行后面的整数个数。后续的mi个整数表示小明对第i棵苹果树的操作记录。若aij(1<= j <= mi)为正整数,则表示小明进行了重新统计该棵树上的苹果个数的操作,统计的苹果个数为aij;若为零或负数,则表示一次疏果操作,去掉的苹果个数为|aij|。
      输入保证一定是正确的,满足:
      1. aij > 0,即对于每棵树的记录,第一个操作一定是统计苹果个数(初始状态,此时不用判断是否有苹果掉落);
      2. 每次疏果操作保证操作后树上的苹果个数仍为正。
输出格式
      输出到标准输出。
      输出只有一行,包含三个整数T、D、E。其中,
      T 为全部蔬果操作结束后所有苹果树上剩下的苹果总数(假设每棵苹果树在最后一次统计苹果个数操作后苹果不会因为疏果以外的原因减少);
      D 为发生苹果掉落的苹果树的棵数;
      E 为相邻连续三棵树发生苹果掉落情况的组数。
      对于第三个统计量的解释:N棵苹果树A1,A2,…,AN排列成一个圆,那么A1与A2相邻,A2与A3相邻,…,AN-1与AN相邻,AN与A1相邻。如果Ai-1,Ai,Ai+1这三棵树都发生了苹果掉落的情况,则记为一组。形式化的,有

其中,Drop(Ai)表示苹果树Ai是否发生苹果掉落的情况,Pred(Ai)表示Ai的前一棵树Ai-1(如果i>1)或者AN(如果i=1),Succ(Ai)表示Ai的后一棵树Ai+1(如果i<N)或者A1(如果i=N)。
样例
样例1
输入:

4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0

输出:

222 1 0

解释:
      全部操作结束后,第1棵树上剩下的苹果个数为74-7-12-5 = 50,第2棵为59-4=55,第3棵为60-2=58,第4棵为59-0=59。因此T=50+55+58+59=222。
      其中,第3棵树在第2次统计之前剩下的苹果个数为76-5-10=61>60,因此发生了苹果掉落的情况。可以检验其他的树没有这种情况,因此D=1。
      没有连续三棵树都发生苹果掉落的情况,因此E=0。
样例2
输入:

5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0

输出:

39 4 2

解释:
      第1、2、4、5棵树发生了苹果掉落的情况,因此D=4.其中,连续三棵树都发生苹果掉落情况的有(5,1,2)和(4,5,1),因此E=2。
子任务

提示
      如果你的程序没有实现统计D和E的功能,请按照D=0,E=0输出结果,这样如果T的统计正确能够得到一部分分数。
      如果你的程序没有实现统计E的功能,请按照E=0输出结果,这样如果T和D的统计正确能够得到一部分分数。

分析

n太大,mi太大,尽量不要尝试将所有数据存储下来在进行分析,但是计算连续三棵树发生苹果掉落情况的的组数时不能只分析一条数据,所以我们可以为每棵树添加一个标记,记录这棵树是否发生了苹果掉落。
      具体算法已在程序中用注释给出。(我写的注释挺详细的)

代码

/*
2019/12/28
csp试题2:小明种苹果(绪)
*/#include <iostream>
using namespace std;long long T = 0;           //剩下的苹果总数
int D = 0;                 //发生苹果掉落的苹果树的棵数
int E = 0;                 //连续三棵树发生苹果掉落情况的的组数
int drop_trees[1001];       //标记每棵树是否发生了苹果掉落 int main(){//1.1接收数据int n;cin >>n;       //苹果树的棵数//1.2初始化drop_trees[],0表示没有发生掉落,1表示发生了掉落for(int i=0; i<1001; i++){drop_trees[i] = 0;       //都初始化为没有发生苹果掉落 } //2 接收每条数据并处理 //对于第i棵树,需要计算其剩余苹果数,将其加到T上 //然后判断其是否发生了苹果掉落,将判断结果保存在drop_trees[]中 //2.1计算其剩余苹果数int num = -1;  //即mi,每条数据中表示操作的数的个数     for(int i=0; i<n; i++){cin >>num;       //接收每条数据中的第一个数 int arr[num];for(int j=0; j<num; j++){cin >> arr[j];} int temp = arr[0];        //表示当前树上有多少苹果 for(int j=1; j<num; j++){if(arr[j] < 0){     //进行疏果操作 temp = temp + arr[j];    //更新当前树上苹果树 }if(arr[j] > 0 && temp > arr[j]){ //进行统计苹果个数操作且发生了苹果掉落 drop_trees[i] = 1;        //标记第i棵树发生了苹果掉落temp = arr[j];          //更新当前树上苹果数 } }T = T + temp;  //苹果总数 = 其他树上的苹果树 + 第i棵树上剩余苹果数 } //2.2处理drop_trees[], 计算D和Efor(int i=0; i<n; i++){if(drop_trees[i] == 1){D++;}if(drop_trees[i%n]==1 && drop_trees[(i+1)%n]==1 && drop_trees[(i+2)%n]==1){E++;} }//3 输出结果cout <<T <<" " <<D <<" " <<E<<endl; return 0;
}

总结

计算连续三棵树发生苹果掉落情况的的组数这个问题其实挺难的,既要在整体的数据中提取数据,又要在具体的数据上考虑循环,我用了取余的方法处理循环问题,看起来挺简单的。
      还有最后一篇试题2,就要干试题3了,慌得一批。。。

csp试题2:小明种苹果(绪)相关推荐

  1. ##CSP认证 201909-2小明种苹果(续)(100分)

    #include<stdio.h> int D=0, E=0; int main() {void judge(int d[], int n);int n,i,j,m,T=0;int a[1 ...

  2. csp试题1:小明种苹果

    csp试题1:小明种苹果 题目 分析 代码 总结 题目 题目描述       小明在他的果园里种了一些苹果树.为了保证苹果的品质,在种植过程中要进行若干轮疏果操作,也就是提前从树上把不好的苹果去掉.第 ...

  3. CCF CSP 2019-9-1 小明种苹果 C语言100分

    CCF CSP 2019-9-1 小明种苹果 C语言100分 小明种苹果 完成时间11-18 16:54 代码长度510B C 正确 100分 耗时93ms 空间使用6.167MB 这道题简单,仅附上 ...

  4. CCF CSP 201909-1小明种苹果 C语言版

    关键词:201909-1 小明种苹果 C语言 先上代码为敬,题目在后面 编译环境:Dev C++ 5.11 语言:C语言 #include <stdio.h> struct tree {i ...

  5. CCF计算机软件能力认证试题练习:201909-2 小明种苹果(续)

    小明种苹果(续) 来源:CCF 标签: 参考资料: 相似题目: 题目 小明在他的果园里种了一些苹果树,这些苹果树排列成一个圆.为了保证苹果的品质,在种植过程中要进行疏果操作.为了更及时地完成疏果操作, ...

  6. CSP 201909-1 小明种苹果

    题目链接:小明种苹果 满分代码 #include <iostream> #include <algorithm> using namespace std;typedef str ...

  7. CCF201909-2 小明种苹果(续)

    试题编号: 201909-2 试题名称: 小明种苹果(续) 时间限制: 1.0s 内存限制: 512.0MB 问题描述:   解题思路: 用一个flag数组来表示是否发生了掉落,采用循环和取余的方式遍 ...

  8. CCF201909-1 小明种苹果

    试题编号: 201909-1 试题名称: 小明种苹果 时间限制: 2.0s 内存限制: 512.0MB 小明种苹果 题目描述 小明在他的果园里种了一些苹果树.为了保证苹果的品质,在种植过程中要进行若干 ...

  9. CCF CSP201909-2 小明种苹果(续)

    CCF CSP201909-2 小明种苹果(续) 题目描述 要点分析 难点: 如何判断相邻连续三棵树发生苹果掉落的情况 解决办法: 先用b数组记录是否发生苹果掉落 再从1开始到N-2遍历数组, 如果连 ...

最新文章

  1. java 日期和字符串互转,根据当天整天时间 得到当天最后一秒的日期时间
  2. 什么场景应该用 MongoDB ?
  3. Jackson 注解 -- 忽略空字段
  4. 学完可以解决90%以上的数据分析问题-利用python进行数据分析第二版(代码和中文笔记)...
  5. 计算机系统安全风险管理,信息系统安全风险及其控制措施.doc
  6. function里面可以写function吗_氨基酸可以和蜂蜜一起喝吗?蜂蜜里面有氨基酸吗?...
  7. 游戏建模之3Dmax的重要性
  8. XenApp/XenDesktop 7.11 对于HDX 3D pro的2点增强
  9. [转]Django 好用的第三方包
  10. CAS简介和无锁队列的实现
  11. lowagie.text 表格带复杂表头 导出word
  12. 【系统分析师之路】系分历年论文命题走向
  13. mysql rds 迁移_如何实现迁移RDS for MySQL数据到本地 MySQL
  14. 《Java从入门到放弃》框架入门篇:在MyEclipse中配置Mybatis框架
  15. 使用python自动发送QQ消息
  16. uc浏览器登录报错50001解决方案,登录失败,请重试50001
  17. appium : 查看Android手机自带浏览器内核版本(webview版本)
  18. 域名解析为什么不生效?域名解析不生效常见问题汇总
  19. 为什么我的订单管理里没有发货按钮?
  20. openstack placement

热门文章

  1. edu邮箱怎么申请一个1T的onedrive
  2. 分销商城小程序开发解决方案
  3. Leetcode_75_Sort Colors
  4. java.beans.transient_JavaBeans程序开发
  5. java发邮件(简单)
  6. 商品房买卖抵押贷款中的保险
  7. 无抵押贷款 幸福生活新选择
  8. 如何给word文档加水印
  9. 解决无法使用localhost连接数据库,使用服务器IP可以
  10. 异常之IllegalAccessException