篝火问题求助

诶,等一下,为什么WA了一个点


#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node {
	int x, y;
} f[1000005];
map<int, int> mp;
signed main() {
	int n, r, c;
	cin >> n >> r >> c;
	for (int i = 1; i <= n; i++) {
		char cc;
		cin >> cc;
		int dx = 0, dy = 0;
		if (cc == 'N') {
			dx = -1;
		} else if (cc == 'S') {
			dx = 1;
		} else if (cc == 'W') {
			dy = -1;
		} else {
			dy = 1;
		}
		f[i].x = f[i - 1].x + dx;
		f[i].y = f[i - 1].y + dy;
		int k = f[i].x * 1000000007ll + f[i].y;
		mp[k] = i;
		int x = f[i].x - r;
		int y = f[i].y - c;
		k = x * 1000000007ll + y;
		if (mp.count(k)) {
			cout << 1;
		} else {
			cout << 0;
		}
	}
}

因为当f[i].x==x&&f[i].y==y的·情况没考虑

1 个赞

当 f[i].x==x&&f[i].y==y,的时候,答案正确?还是什么

啥意思?

当该条件满足的时候,输出1啊!

1 个赞

对啊,但是我为什么还是过不了

#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node {
	int x, y;
} f[1000005];
map<int, int> mp;
signed main() {
	int n, r, c;
	cin >> n >> r >> c;
	for (int i = 1; i <= n; i++) {
		char cc;
		cin >> cc;
		int dx = 0, dy = 0;
		if (cc == 'N') {
			dx = -1;
		} else if (cc == 'S') {
			dx = 1;
		} else if (cc == 'W') {
			dy = -1;
		} else {
			dy = 1;
		}
		f[i].x = f[i - 1].x + dx;
		f[i].y = f[i - 1].y + dy;
		int k = f[i].x * 1000000007ll + f[i].y;
		mp[k] = i;
		int x = f[i].x - r;
		int y = f[i].y - c;
		k = x * 1000000007ll + y;
		if (mp.count(k)||f[i].x==x&&f[i].y==y) {
			cout << 1;
		} else {
			cout << 0;
		}
	}
}

(帖子已被作者删除)

我的x,y就是你的r和c

2 个赞
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node {
	int x, y;
} f[1000005];
set<pair<int, int>> mp;
signed main() {
	int n, r, c;
	cin >> n >> r >> c;
	for (int i = 1; i <= n; i++) {
		char cc;
		cin >> cc;
		int dx = 0, dy = 0;
		if (cc == 'N') {
			dx = -1;
		} else if (cc == 'S') {
			dx = 1;
		} else if (cc == 'W') {
			dy = -1;
		} else {
			dy = 1;
		}
		f[i].x = f[i - 1].x + dx;
		f[i].y = f[i - 1].y + dy;
		mp.insert({f[i].x, f[i].y});
		int x = f[i].x - r;
		int y = f[i].y - c;
		if (mp.count({x, y}) || (f[i].x == x && f[i].y == y)) {
			cout << 1;
		} else {
			cout << 0;
		}
	}
}

还是WA90

看我这个,把判断条件里的x,y改成r,c

1 个赞

哦,我好像懂了

过了,谢谢!

1 个赞