题解——Codeforces Round #507 (based on Olympiad of Metropolises) T1 (模拟)
暴力模拟即可
就是情况略多
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; int n,a,b,num[40],pos,ans=0; int main(){ scanf("%d %d %d",&n,&a,&b); for(int i=1;i<=n;i++) scanf("%d",&num[i]); if(n%2==1){ pos=n/2+1; if(num[pos]==2) ans+=min(a,b); for(int i=pos-1,j=pos+1;i>=1;i--,j++){ if(num[i]==num[j]&&num[i]!=2&&num[j]!=2) continue; else if(num[i]!=num[j]&&num[i]==0){ if(num[j]==1){ printf("-1"); return 0; } else{ ans+=a; } } else if(num[i]!=num[j]&&num[i]==1){ if(num[j]==0){ printf("-1"); return 0; } else{ ans+=b; } } else if(num[i]!=num[j]&&num[i]==2){ if(num[j]==1){ ans+=b; } else if(num[j]==0){ ans+=a; } } else if(num[i]==num[j]&&num[i]==2&&num[j]==2){ ans+=min(a,b)*2; } } } else{ pos=n/2; for(int i=pos,j=pos+1;i>=1;i--,j++){ if(num[i]==num[j]&&num[i]!=2&&num[j]!=2) continue; else if(num[i]!=num[j]&&num[i]==0){ if(num[j]==1){ printf("-1"); return 0; } else{ ans+=a; } } else if(num[i]!=num[j]&&num[i]==1){ if(num[j]==0){ printf("-1"); return 0; } else{ ans+=b; } } else if(num[i]!=num[j]&&num[i]==2){ if(num[j]==1){ ans+=b; } else if(num[j]==0){ ans+=a; } } else if(num[i]==num[j]&&num[i]==2&&num[j]==2){ ans+=min(a,b)*2; } } } printf("%d",ans); }