题目
题解
这道题看似有很多种情况,但障碍的移动方式其实只有几种。当所有障碍在一列时,可以将某一个障碍水平移动一格,再垂直移动一格或者水平移动两格。当有通路时,则无需移动。其余情况都可以通过将其中一个障碍水平移动一格或垂直移动一格来达成目标。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int a[maxn];
int main()
{
int T; scanf("%d",&T);
while(T--)
{
int n,u,v; scanf("%d%d%d",&n,&u,&v);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
bool same=1,can=0;
for(int i=2;i<=n;i++) if(abs(a[i]-a[i-1])>1) can=1;
if(can) {printf("0\n"); continue;}
for(int i=2;i<=n;i++) if(a[i]!=a[1]) same=0;
int ans;
if(same) ans=min(u+v,v*2);
else ans=min(u,v);
printf("%d\n",ans);
}
return 0;
}