Codeforces Global Round 13B. Minimal Cost
一.题目
输入样例
3
2 3 4
2 2
2 3 4
3 2
2 4 3
3 2
输出样例
7
3
3
思路
仔细读题后,你可以发现第一列和最后一列没有放障碍物,降低了题目的难度,我可以从a[1][0]直接走到a[n][0],在几何图形你可以发现,只要存在a[i][j]与a[i-1][j]绝对值之差大于等于2,那么就可以绕过障碍物直接通过。另外两种情况是障碍物全在一列上,障碍物列之差为一,全在一列上时,可以水平推两次,或者垂直推一次,水平推一次,二者取较小者,当障碍物列之差为一时,那么只需要水平或垂直推一次,取较小者。
ac代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define sl(n) scanf("%lld",&n)
#define pl(n) printf("%lld",n)
#define pE printf("\n")
#define ull unsigned long long
#define pb push_back
#define pre(n) for(ll i=1;i<=n;i++)
#define rep(n) for(ll i=n;i>=2;i--)
#define Pi pari<ll,ll>
ll a[110];
int main(){
ll t,x,y,n;
sl(t);
while(t--){
bool flag=true;
sl(n),sl(x),sl(y);
set<ll>s;
pre(n){
sl(a[i]);
s.insert(a[i]);
}
if(s.size()==1){pl(min(x+y,2*y)),pE;continue;}
rep(n)if(abs(a[i]-a[i-1])>=2){puts("0");flag=false;break;}
if(flag)pl(min(x,y)),pE;
}
return 0;
}