代码段求助!悬关一个
  • 板块学术版
  • 楼主Link_Cut_Y
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/6/10 12:58
  • 上次更新2023/10/23 13:30:37
查看原帖
代码段求助!悬关一个
519384
Link_Cut_Y楼主2023/6/10 12:58

真的是很短的代码段。。。

rt。Dark Forest

O(1)O(1) 交换两个数计算答案出问题了。我眼花了看不出来锅。

int calc(int x, int y) { // 计算交换 x, y 后的权值
	int nans = ans;
	nans -= p[get(x)] * a[p[get(x - 1)]] * a[p[get(x)]] * a[p[get(x + 1)]];
	nans -= p[get(x - 1)] * a[p[get(x - 2)]] * a[p[get(x - 1)]] * a[p[get(x)]];
	nans -= p[get(x + 1)] * a[p[get(x)]] * a[p[get(x + 1)]] * a[p[get(x + 2)]];
	nans -= p[get(y)] * a[p[get(y - 1)]] * a[p[get(y)]] * a[p[get(y + 1)]];
	nans -= p[get(y - 1)] * a[p[get(y - 2)]] * a[p[get(y - 1)]] * a[p[get(y)]];
	nans -= p[get(y + 1)] * a[p[get(y)]] * a[p[get(y + 1)]] * a[p[get(y + 2)]];
	swap(p[x], p[y]);
	nans += p[get(x)] * a[p[get(x - 1)]] * a[p[get(x)]] * a[p[get(x + 1)]];
	nans += p[get(x - 1)] * a[p[get(x - 2)]] * a[p[get(x - 1)]] * a[p[get(x)]];
	nans += p[get(x + 1)] * a[p[get(x)]] * a[p[get(x + 1)]] * a[p[get(x + 2)]];
	nans += p[get(y)] * a[p[get(y - 1)]] * a[p[get(y)]] * a[p[get(y + 1)]];
	nans += p[get(y - 1)] * a[p[get(y - 2)]] * a[p[get(y - 1)]] * a[p[get(y)]];
	nans += p[get(y + 1)] * a[p[get(y)]] * a[p[get(y + 1)]] * a[p[get(y + 2)]];
	swap(p[x], p[y]);
	res = max(res, nans);
	return nans;
}
2023/6/10 12:58
加载中...