7 条题解

  • 0
    @ 2024-11-24 8:08:44

    X3C

    「RiOI-4」消えた夏の夢

    思路

    显然,一个数字只会被选 11 次或 00 次,证明如下:

    令当前数为 XX,序列中某个数字为 aia_i

    那么第一次选时 XX 会变成 X+aiX + a_iaia_i 会变成 ai-a_i

    第二次选时 X+aiX + a_i 会变成 X+aiai=XX + a_i - a_i \xlongequal {} Xai-a_i 会变成 aia_i

    也就是说,第二次选择一个数等于没选。

    所以每个数字只会被选 11 次或 00 次。

    那么就可以贪心了。如果 ai>0a_i > 0,就选它,计算贡献,否则不选它,不计算贡献。

    复杂度

    时间复杂度:

    O(N)O(N)

    空间复杂度:

    O(N)O(N)

    Code

    #include <bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    int n,a[N];
    long long ans=0;
    signed main(){
        scanf("%d%lld",&n,&ans);
        for(int i=1;i<=n;i++)
            scanf("%d",a+i);
        for(int i=1;i<=n;i++)
            if(a[i]>0)
                ans+=a[i];
        printf("%lld",ans);
        return 0;
    }
    

    信息

    ID
    48
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    425
    已通过
    276
    上传者