这题没注意ai的范围时[1,1e6],以为他是所有列都会有障碍,卡了好久。(太菜了)。
题目不是一定要走边缘,不要只看翻译!!!!
以后写题注意看清题目范围,这不是第一次了,qwq。
题意
从(1,0)走到(n,1e6+1)。每一行都有一个障碍且障碍的范围是从第一列到第1e6列。
将障碍左右移一格花费u,上下移动一格花费v。问最少花费。
思路
如果所有障碍变成一堵墙的话答案就是min(u+v,v+v),
不是一堵墙但是挡住了向右移动的路答案是min(u,v),
其他情况就是0。

#include <iostream>
#include<stdio.h>
#include <cstring>
#include <algorithm>
#include <string.h>
#include <queue>
//#include <bits/stdc++.h>
#define pb push_back
#define qc std::ios::sync_with_stdio(0);
#define maxn 0x3f3f3f
#define debug(x) cout<<"debug"<<x<<endl;
using namespace std;
const int max_n=35;
const int min_n=10000000;
typedef long long ll;
typedef unsigned long long int ul;
typedef double dl;
int a[5005];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,u,v;
        cin>>n>>u>>v;
        int flag1=1,flag2=1;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        ll ans;
        /*
        if(n==2)
        {
            if(a[1]==a[2]) ans=min(u+v,v+v);
            else if(a[1]+1==a[2]||a[1]-1==a[2]) ans=min(u,v);
            else ans=0;
         }
         else {
             if(a[1]==a[2]&&a[n]==a[n-1]) ans=u+v;
             else if(a[1]+1==a[2]||a[1]-1==a[2])
                {
                    if(a[n]+1==a[n-1]||a[n]-1==a[n-1]) ans=u;
                    else ans=0;
                }
                else ans=0;
         }*/
         for(int i=1;i<n;i++)
         {
             if(abs(a[i]-a[i+1])<=1)
             {
                 if(abs(a[i]-a[i+1])!=0) flag2=0;
             }

                 else flag1=0;
         }
         if(flag1==1)
         {
             if(flag2==1) ans=min(u+v,v+v);
             else ans=min(u,v);
         }
         else 
         {
             ans=0;
         }
        cout<<ans<<endl;
    }
}