专栏文章

题解:P11061 【MX-X4-T1】「Jason-1」IO++

P11061题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@minpdfmi
此快照首次捕获于
2025/12/02 06:10
3 个月前
此快照最后确认于
2025/12/02 06:10
3 个月前
查看原文
芜湖,第一次见到 11 年前到现在还可以提交题解的题目。

思路

先解释题目。
一个只有输入输出的程序,它的行为用数组 aa 来表示。如果 aia_i00,就是输入,否则为输出。
但是呢,他有一个要求,输出的时候必须执行了 aia_i 次输入。然后求这个程序至少要有多长。
每输入或者输出一次,长度都加 11,但是又有一个要求,所以不能直接加。输入的先不管,先算输出的,输出的就是数组 aa 中不为 00 的部分,把他们出现的次数加起来就可以,如果是输入怎么办?我们可以把题目提的要求转换一下思路,要求要有 aia_i 次输入,那我直接求 aia_i 的最大值作为输入的次数不就可以了吗?
如果我这次输出需要的输入次数不够,那我就增加输入次数,直到可以进行这一次输出,当然增加不要超过了,只要能刚好执行这一次的输出(其实就是比较啦,如果需要输入次数的比当前的大,就把当前的输入次数变成现在需要的输入次数,就是把 ans 变成 aia_i)。
那我定义两个变量 anssum,它们分别用于求输入的次数和输出的次数,每到 aia_i 不为 00 的时候,sum 就加一,并且进行一次比较,如果 aia_i 要求的输入次数,大与当前的输入次数 ansans,那么就把 aia_i 当做输入的次数。
最后把两个加起来输出就可以了。

代码

CPP
#include <bits/stdc++.h>
using namespace std;

int main() {

    int n, sum = 0, ans = 0; //一个是输入的总量,一个是输出的总量
    cin >> n;
    while (n--) {
        int a;
        cin >> a;
        if (a != 0) {
            sum++;
            ans = max(ans, a); 
            //max用于判断当前的输入次数能不能执行这一次输出
            //如果不行,那就是不够,要再增加输入次数
            //增加到刚好可以执行这一次输出
        }
    }
    cout << ans + sum << endl;

    system("pause");
    return 0;
}

应该没人现在还做这道题吧

评论

1 条评论,欢迎与作者交流。

正在加载评论...