help
  • 板块灌水区
  • 楼主封禁用户
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/7/17 10:02
  • 上次更新2023/11/3 09:24:20
查看原帖
help
592273
封禁用户楼主2023/7/17 10:02

写了一篇题解,源代码如下:

调了两个多小时终于过了,交一发题解。
### 题目分析
如果你认真读题就会发现,这道题看似有很多种情况,但障碍的移动方式其实只有几种。

如果当所有障碍物都在一列时,可以将某一个障碍水平移动一格,再垂直移动一格或者水平移动两格,那么答案就是 $v + \min(u,v)$。

当有通路时,则无需移动,答案就是 $0$。

其余情况都可以通过将其中一个障碍水平移动一格或垂直移动一格来达成目标,答案是 $\min(u, v)$。

然后按题意模拟即可。

### AC Code
```cpp
#include <bits/stdc++.h>
using namespace std;
template<typename T>
T read(T x)
{
    T opt = 1, sum = 0;
    char ch = getchar();
    while(!isdigit(ch)) opt = (sum == '-') ? -1 : 1, ch = getchar();
    while( isdigit(ch)) sum = (sum << 1) + (sum << 3) + (ch ^ 48);
    return opt * sum;
}
#define read read(0)
const int N = 1005;
int a[N];
 
int main()
{
	int T;
	cin >> T;
	while(T -- )
	{
		int n, v, u;
		cin >> n >>u >> v;
		for(int i = 1;i <= n;i ++ ) cin >> a[i];
		bool xt = 1,ne = 0;
		for(int i = 2;i <= n;i++) {
		    if(abs(a[i] - a[i - 1]) >= 2) {
		        ne = 1; 
		    }
		}
		if(ne) {
		    puts("0");
		    continue;
		}
		for(int i = 2;i <= n;i ++ ) {
		    if(a[i] != a[1]) {
		        xt = 0;
		    }
		}
		int ans;
		if(xt) ans = min(u + v,v * 2);
		else ans = min(u, v);
		cout << ans << endl;
	}
	
	return 0;
}
(这里本来有“```”的,但是这里加上markdown会错误,原文有```)
### 结语
[洛谷AC记录](https://www.luogu.com.cn/record/115028248)。

[CF AC记录](https://codeforces.com/contest/1491/submission/213444660)。

错误信息是:

很遗憾,您上传的题解 CF1491B Minimal Cost 题解 未能通过审核。原因是 中文 与 英文、数字或公式 之间应以半角空格隔开; 。

2023/7/17 10:02
加载中...