CSP 小明种苹果(续)201909-2

输入:

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

输入:

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.发生苹果掉落和疏果是两种不同的操作 发生苹果掉落(5 3) 疏果(5 -3)

2.一棵树可能出现多次苹果掉落的情况 比如:3 5 2 1(对于一棵树来说 有3个操作,原来有5个苹果,第一次掉落后还剩2个,第二次掉落后还剩1个)

3.当发生苹果掉落的苹果树的棵树大于等于3时才可能形成连续的三个苹果树

发生苹果掉落的苹果树的序号我是用栈存的,感觉稍微麻烦了点,有时间试试数组

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <stack>
#include <cstring>
#define mem(a,b) memset(a,b,sizeof(a))

using namespace std;
typedef long long LL;
const int mod = 1e9+7;
int dir[4][2] = {0,1,0,-1,1,0,-1,0};
stack<int>q;
 int main()
{
    LL n;
    LL T = 0,D = 0,E = 0;
    cin >> n;
    int first = 0,second = 0;
    for(int i = 1; i <= n; i++) {
        int k;
        cin >> k;
        LL res1 = 0,kk;
        for(int j = 1; j <= k; j++) {
            cin >> kk;
            if(j == 1) {
                res1 = kk;
            } else {
                if(kk > 0) {
                    if(kk != res1)
                       {
                           if(q.size() == 0) {
                               q.push(i);
                               first = i;
                               D++;//在内部统计D 防止一个序号的苹果树被多次统计
                              // cout << i << endl;
                           } else if(q.size() == 1) {
                               int temp = q.top();
                               if(i != temp)
                               {
                                   q.push(i);
                                   second = i;
                                   D++;//如果该苹果树没有在栈中出现过D++
                                  // cout << i << endl;
                               }
                           }
                           else {
                               int temp = q.top();
                               if(i != temp)
                               {
                                   q.push(i);
                                   D++;
                                  // cout << i << endl;
                               }
                           }
                       }
                     res1 = kk;
                } else {
                    res1 -= -kk;
                }
            }
        }
        T += res1;
    }
    if(q.size() >= 3){//当发生苹果掉落的苹果树棵树大于等于3时才有可能出现连续的三个苹果树
    while(!q.empty()){
        int temp = q.top();
        q.pop();
        //苹果树序号连续的三种情况
        if((temp+1 == first && first+1 == second) || ((temp == n) && (first == 1) && (second == 2)) || ((temp == n-1) && (first == n) && (second = 1))) {
            E++;
        }
        second = first;
        first = temp;
    }
    }
    cout << T << " " << D << " " << E << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/LLLAIH/p/11634639.html

时间: 2024-11-06 12:32:52

CSP 小明种苹果(续)201909-2的相关文章

CCF-CSP:201909-2小明种苹果(续)

题目 编号: 201909-2 试题名称: 小明种苹果(续) 时间限制: 1.0s 内存限制: 512.0MB 题目描述 ??小明在他的果园里种了一些苹果树,这些苹果树排列成一个圆.为了保证苹果的品质,在种植过程中要进行疏果操作.为了更及时地完成疏果操作,小明会不时地检查每棵树的状态,根据需要进行疏果.检查时,如果发现可能有苹果从树上掉落,小明会重新统计树上的苹果个数(然后根据之前的记录就可以判断是否有苹果掉落了).在全部操作结束后,请帮助小明统计相关的信息. 输入格式 ??从标准输入读入数据.

小明种苹果 201909_1

试题编号: 201909-1 试题名称: 小明种苹果 时间限制: 2.0s 内存限制: 512.0MB 问题描述: 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int C=1001; 6 7 struct data 8 { 9 int ID; 10 int isum; 11 int leftNum; 12 }dat[C]; 13 14 bool cmp(struct data a,struct data b) 15

CCF-CSP:201909-1小明种苹果

题目 编号: 201909-1 试题名称: 小明种苹果 时间限制: 2.0s 内存限制: 512.0MB 题目描述 ??小明在他的果园里种了一些苹果树.为了保证苹果的品质,在种植过程中要进行若干轮疏果操作,也就是提前从树上把不好的苹果去掉.第一轮疏果操作开始前,小明记录了每棵树上苹果的个数.每轮疏果操作时,小明都记录了从每棵树上去掉的苹果个数.在最后一轮疏果操作结束后,请帮助小明统计相关的信息. 输入格式 ??从标准输入读入数据. ??第1行包含两个正整数\(N\)和\(M\),分别表示苹果树的

[CCF CSP]201909-2 小明种苹果(续)

模拟题,尝试用python3写了一发,发现不能ac,觉得可能是python写挂了,又用C++写了一遍,还是只能90分. 最后通过看他人的博客被点醒,N=3且3组都有掉落情况时,E=3!! 其实还是自己读题能力弱了,题意中有对第三个统计量的形式化解释: 是满足条件的元素个数. 另外,还需要注意总和数T可能爆int,需要开longlong(python无视) C++代码: #include<bits/stdc++.h> using namespace std; #define ll long lo

CCF201909-2 试题名称:小明种苹果(续)

首先阅读题目,看到关键词围成一个圆,就能想到约瑟夫问题的环问题,题目是要求我们统计在蔬果以后所有果树的的果子总量sum,苹果树在蔬果中掉落果子的棵树D(一棵树可能多次掉落果子,但是仍然仅仅记录为一棵),每连续三棵树树掉落的情况E import java.util.Scanner; public class Main_04 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int N

CCF201909-1小明种苹果

解题思路:定义一个二维数组来存放输入的信息,第一列用来存放所有果树的初始值,然后遍历数组.具体思路见代码注释. 第一遍提交得了80分,看了半天才明白了原因,快被自己蠢死...... 定义数组应该为a[1000][1001],第一遍没有思考直接看了问题规模就定义成了a[1000][1000]. 有一列是专门用来放初始的果子数的呀啊喂......... #include<iostream> #include<cmath> using namespace std; int a[1000]

hdu 4521 小明系列问题——小明序列 (间隔至少为d的LIS 两种解法)

先附上资源地址:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握. 最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂. 1. 计算机的核心是CPU,它承担了所有的计算任务.它就像一座工厂,时刻在运行. 2. 假定工厂的电力有限,一次只能供给一个车间使用.也就是说,一个车间开工的时候,其他车间都必须停工

爱摘苹果的小明

爱摘苹果的小明 描述 小明家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,小明就会跑去摘苹果.小明有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在已知10个苹果到地面的高度,以及小明把手伸直的时候能够达到的最大高度,请帮小明算一下她能够摘到的苹果的数目.假设她碰到苹果,苹果就会掉下来. 输入 第一行输入N(0<N<100)表示测试数据组数,接下来每组测试输入包括两行数据.第一行包含10个100到200之间(包括100和200)的整数(以

南阳acm-50-爱摘苹果的小明(水题)

爱摘苹果的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 小明家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,小明就会跑去摘苹果.小明有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 现在已知10个苹果到地面的高度,以及小明把手伸直的时候能够达到的最大高度,请帮小明算一下她能够摘到的苹果的数目.假设她碰到苹果,苹果就会掉下来. 输入 第一行输入N(0<N<100)表示测试数据组数,接下来每组测试输入包括两行