关于struct的强制类型转换
  • 板块学术版
  • 楼主happybob
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/12/16 22:06
  • 上次更新2023/11/3 21:55:01
查看原帖
关于struct的强制类型转换
332914
happybob楼主2021/12/16 22:06

就拿这道题为例:https://www.luogu.com.cn/problem/P1135

我本地的 vs2022 用这份代码是正确的:

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

const int N = 205;
int k[N];
int n, a, b;
bool visit[N << 1];

struct Node
{
	int num, times;
};

void bfs()
{
	queue<Node> q;
	Node t;
	t.num = t.times = 0;
	int cnt = 0;
	q.push(Node(a, 0));
	while (!q.empty())
	{
		t = q.front();
		q.pop();
		if (t.num == b)
		{
			cout << t.times << endl;
			return;
		}
		if (t.num + k[t.num] <= n && !visit[t.num + k[t.num]])
		{
			q.push(Node(t.num + k[t.num], t.times + 1));
			visit[t.num + k[t.num]] = true;
		}
		if (t.num - k[t.num] >= 1 && !visit[t.num - k[t.num]])
		{
			q.push(Node(t.num - k[t.num], t.times + 1));
			visit[t.num - k[t.num]] = true;
		}
	}
	cout << "-1\n";
}

int main()
{
	cin >> n >> a >> b;
	for (int i = 1; i <= n; i++)
	{
		cin >> k[i];
	}
	bfs();
	return 0;
}

但是 luogu 的评测机会 CE,要改成这样:

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

const int N = 205;
int k[N];
int n, a, b;
bool visit[N << 1];

struct Node
{
	int num, times;
};

void bfs()
{
	queue<Node> q;
	Node t;
	t.num = t.times = 0;
	int cnt = 0;
	q.push((Node){a, 0});
	while (!q.empty())
	{
		t = q.front();
		q.pop();
		if (t.num == b)
		{
			cout << t.times << endl;
			return;
		}
		if (t.num + k[t.num] <= n && !visit[t.num + k[t.num]])
		{
			q.push((Node){t.num + k[t.num], t.times + 1});
			visit[t.num + k[t.num]] = true;
		}
		if (t.num - k[t.num] >= 1 && !visit[t.num - k[t.num]])
		{
			q.push((Node){t.num - k[t.num], t.times + 1});
			visit[t.num - k[t.num]] = true;
		}
	}
	cout << "-1\n";
}

int main()
{
	cin >> n >> a >> b;
	for (int i = 1; i <= n; i++)
	{
		cin >> k[i];
	}
	bfs();
	return 0;
}

但是这样 vs 又会 CE,那么正规考试到底用哪个?

2021/12/16 22:06
加载中...