求助
  • 板块灌水区
  • 楼主Leo11
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/24 20:32
  • 上次更新2025/1/27 12:34:45
查看原帖
求助
990387
Leo11楼主2023/12/24 20:32

link

代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1;
int n, k, ans = 0x7fffff, a[N], b[N];
int main()
{
	cin >> n >> k;
	multiset <int> st;
	for(int i = 1; i <= n; i++)
	{
		st.insert(i);
		st.insert(i);
	}
	for(int i = 1; i <= k; i++)
	{
		int x;
		cin >> x;
		st.erase(st.find(x));
	}
	vector <int> v = {0};
	for(auto x : st)
	{
		v.push_back(x);
	}
	int m = v.size() - 1;
	for(int i = 2; i <= m; i++)
	{
		a[i] = a[i - 2] + v[i] - v[i - 1];
	}
	for(int i = m - 1; i >= 1; i -= 2)
	{
		b[i - 1] = b[i + 1] + v[i] - v[i - 1];
	}
	if(k % 2 == 0)
	{
		ans = a[m];
	}
	else
	{
		for(int i = 1; i <= m; i += 2)
		{
			ans = min(ans, a[i - 1] + b[i + 1]);
		}
	}
	cout << ans;
}

求调,样例不知道为什么过不了!

2023/12/24 20:32
加载中...