专栏文章
题解:P11638 Max,Mex
P11638题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miqddsze
- 此快照首次捕获于
- 2025/12/04 02:58 3 个月前
- 此快照最后确认于
- 2025/12/04 02:58 3 个月前
如果两个操作数 进行操作,那么只有 或是 时才能让这两个数的和增加。但是,我们不仅可以把 变成其他数,还能把其他数(比如 )变为 !把所有的 变为 ,然后和其他数配对,就是最优解。
所以,最终答案就是(假设一共有 个 和 ,去除了序列中的 和 之后序列的和为 ):
这个式子中的 是因为第一个变换后的 (原先序列中的 和 )只能变为 ,而其他变换后的 (原先序列中的 和 )能够变为 。
但是,这里有个坑点(hack 数据):如果 ,那么最终的答案只能是序列的和,而不是上面那个式子。
代码:
CPP#include<bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f
using namespace std;
int n,x,ans,orz;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
if(x==0||x==1)orz++;
else ans+=x;
}
if(n!=1&&orz!=0)cout<<ans+2*orz-1;
else cout<<ans;
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...