关于 const int& 的一些疑问
  • 板块学术版
  • 楼主TigerTanWQY
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/5/30 21:54
  • 上次更新2024/5/31 12:57:05
查看原帖
关于 const int& 的一些疑问
617314
TigerTanWQY楼主2024/5/30 21:54

我在做 AcWing 827. 双链表 时实现了一个链表插入函数:

void add(const int& k, const int& x) {
	ls[idx] = x;
	R[idx] = R[k];
	L[idx] = k;
	L[R[k]] = idx;
	R[k] = idx++;
}

但是这会导致代码 WA。而这段代码:

void add(const int k, const int x) {
	ls[idx] = x;
	R[idx] = R[k];
	L[idx] = k;
	L[R[k]] = idx;
	R[k] = idx++;
}

却能 AC。

也就是说,将 const int& 更改为 const int 即可 AC。

所以这里 const int& 为什么会影响代码正确性?

完整 AC Code

#include <iostream>
#include <string>
using namespace std;

const int N = 100003;
int ls[N], L[N], R[N], idx;

void rmv(const int& k) {
	R[L[k]] = R[k];
	L[R[k]] = L[k];
}

void add(const int k, const int x) {
	ls[idx] = x;
	R[idx] = R[k];
	L[idx] = k;
	L[R[k]] = idx;
	R[k] = idx++;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	int head = 0, tail = N - 1;
	R[head] = tail;
	L[tail] = head;
	idx = 1;
	int m;
	cin >> m;
	for(string op; m--; ) {
		cin >> op;
		if(op == "R") {
			int x;
			cin >> x;
			add(L[tail], x);
		} else if(op == "D") {
			int k;
			cin >> k;
			rmv(k);
		} else if(op == "L") {
			int x;
			cin >> x;
			add(head, x);
		} else if(op == "IL") {
			int k, x;
			cin >> k >> x;
			add(L[k], x);
		} else if(op == "IR") {
			int k, x;
			cin >> k >> x;
			add(k, x);
		}
	}
	for(int i = R[head]; i != tail; i = R[i])
		cout << ls[i] << ' ';
	return 0;
}
2024/5/30 21:54
加载中...