题解:CF2278C Math and Physics
顶级分讨题。
序列为全
首先我们注意到,当一个序列
举个例子:序列
接下来考虑如何尽可能的消掉
我们发现,当存在一个不在序列两端的数
再举个例子,序列
那如果非
我们拿
再举一个例子:
综上,当有解时,若存在一个不在序列两端的非
时间复杂度线性。
#include<bits/stdc++.h>
using namespace std;
int n,a[200005];
void solve(){
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]!=1) cnt++;
}
if(!cnt){
cout<<"-1\n";
return ;
}
if(cnt==1){
if(a[1]!=1||a[n]!=1){
cout<<max(a[1],a[n])<<'\n';
return ;
}
}else if(cnt==2){
if(a[1]!=1&&a[n]!=1){
cout<<(a[1]+a[n])-1<<'\n';
return ;
}
}
int sum=0;
for(int i=1;i<=n;i++) sum+=a[i];
cout<<sum-1<<'\n';
return ;
}
int main(){
int T;
cin>>T;
while(T--) solve();
}