题解——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);
}

 

posted @ 2018-09-06 07:39  dreagonm  阅读(170)  评论(0编辑  收藏  举报