20190901 小明种苹果

解题思路

  • 两种求和运算,可以只保存下标用于记录被筛过最多的
  • 其他的就很简单,注意下标边界问题

    代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <bits/stdc++.h>
using namespace std;

// 小明种苹果

struct pingguo{
int guoshi;
int shuguo;
};

int main(){
int num1, num2;// 种植数目和蔬果轮数
cin>>num1>>num2;
pingguo p[num1];
int index = 0;
int sum = 0;
for(int i = 0;i<num1;i++){
int tmp;
cin>>tmp;
int shu = 0;
for(int k = 0;k<num2;k++){
int shu1;
cin>>shu1;
shu += shu1;
}
p[i].guoshi = tmp+shu;
p[i].shuguo = 0 - shu;
sum += tmp+shu;
if(p[i].shuguo>p[index].shuguo){
index = i;
}
}
cout<<sum<<" "<<index+1<<" "<<p[index].shuguo;
return 0;

/*
3 3
73 -8 -6 -4
76 -5 -10 -8
80 -6 -15 0
输出:167 2 23
2 2
10 -3 -1
15 -4 0
输出:17 1 4
*/

}

20190902 小明种苹果2

解题思路

  • 数据输入范围很大,用longlong
  • 判断到重置数目时可以直接替换
  • 维护一个bool表保存是否发生掉落
  • 判断连续三个没有想出好的办法,边界处理使用了硬编码的方法

    代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #include <bits/stdc++.h>
    using namespace std;

    struct pingguo{
    long long guoshi;
    bool diaoluo;
    };

    int main(){
    int num1;
    cin>>num1;
    pingguo p[num1];
    long long sum = 0;
    int D = 0;
    int E = 0;
    for(int i = 0;i<num1;i++){
    p[i].diaoluo = false;
    long long tmp;
    int num2;
    cin>>num2>>tmp;
    for(int k = 0;k<num2-1;k++){
    long long tmp2;
    cin>>tmp2;
    if(tmp2 > 0){
    if(tmp2!=tmp){
    p[i].diaoluo = true;
    tmp = tmp2;
    }
    }
    else{
    tmp=tmp+tmp2;
    }
    }
    if(p[i].diaoluo){
    D++;
    }
    sum = sum + tmp;
    }
    if(num1>=3){
    for(int i = 1;i<num1-1;i++){
    if(p[i-1].diaoluo&&p[i].diaoluo&&p[i+1].diaoluo){
    E++;
    }
    }
    if(p[0].diaoluo&&p[1].diaoluo&&p[num1-1].diaoluo){
    E++;
    }
    if(p[0].diaoluo&&p[num1-1].diaoluo&&p[num1-2].diaoluo){
    E++;
    }
    }
    cout<<sum<<" "<<D<<" "<<E;
    return 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
    输出: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
    */
    }