题解:P11638 Max,Mex

· · 题解

题解:P11638 Max,Mex

题目传送门

前置知识

\sum_{i=1}^n a_i=a_1+a_2+a_3+a_4+a_5+ \cdots+a_n

思路

本题中定义 \max\{S\}S 中的最大值,\operatorname{mex}\{S\}S 中最小没出现过的自然数。一次操作你可以选定一个 (i,j),满足 1\le i,j\le n 以及 i\neq j,令 x=\max\{a_i,a_j\}y=\operatorname{mex}\{a_i,a_j\},那么 a_i=xa_j=y

subtask 1&2

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll cnt,ans,sum,n,a;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a;
        sum+=a;
        if(n==1){
            cout<<a;
            return 0;
        }
        if(a==0) cnt++;
        if(a==1) ans++;
    }
    if(cnt+ans==0) cout<<sum;
    else cout<<cnt*2+ans+sum-1;
    return 0;
}

本题思维难度略大,代码实现方面比较简单。