学生
(kasaoluo)
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 c;
cin >> c;
int dx = 0, dy = 0;
if (c == 'N') {
dx = -1;
} else if (c == 'S') {
dx = 1;
} else if (c == '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;
if (i > 0 && (f[i].x != 0 || f[i].y != 0)) {
if (!mp.count(k)) {
mp[k] = i;
}
}
}
for (int i = 1; i <= n; i++) {
int x = f[i].x - r;
int y = f[i].y - c;
int k = x * 1000000007ll + y;
if (mp[k] == 0 || mp.count(k) || (f[k].x != 0 || f[k].y != 0)) {
cout << 1;
} else {
cout << 0;
}
}
}

样例全部输出1,求助。
CZF2919
(陈泽樊)
4
懂了,你输出那个循环不能mp全部ok了之后查,不然肯定都是1的。你要在输入的同时输出
1 个赞
学生
(kasaoluo)
5
就是把上面这一段移到
if (i > 0 && (f[i].x != 0 || f[i].y != 0)) {
if (!mp.count(k)) {
mp[k] = i;
}
}
下面吗?
CZF2919
(陈泽樊)
7
还有你的(f[k].x != 0 || f[k].y != 0)明显不对啊,k怎么回事这个数组的下标呢?
1 个赞
学生
(kasaoluo)
8
#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 c;
cin >> c;
int dx = 0, dy = 0;
if (c == 'N') {
dx = -1;
} else if (c == 'S') {
dx = 1;
} else if (c == '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;
if (i > 0 && (f[i].x != 0 || f[i].y != 0)) {
if (!mp.count(k)) {
mp[k] = i;
}
}
int x = f[i].x - r;
int y = f[i].y - c;
k = x * 1000000007ll + y;
if (mp[k] == 0 || mp.count(k) || (f[k].x != 0 || f[k].y != 0)) {
cout << 1;
} else {
cout << 0;
}
}
}
输出一样
CZF2919
(陈泽樊)
10
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;
}
1 个赞
学生
(kasaoluo)
12
#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 c;
cin >> c;
int dx = 0, dy = 0;
if (c == 'N') {
dx = -1;
} else if (c == 'S') {
dx = 1;
} else if (c == '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;
if (i > 0 && (f[i].x != 0 || f[i].y != 0)) {
if (!mp.count(k)) {
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;
}
}
}
是这样吗?全输出0了
@CZF2919
学生
(kasaoluo)
14
#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 c;
cin >> c;
int dx = 0, dy = 0;
if (c == 'N') {
dx = -1;
} else if (c == 'S') {
dx = 1;
} else if (c == '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;
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;
}
}
}
也是0啊
学生
(kasaoluo)
17
#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 c;
cin >> c;
int dx = 0, dy = 0;
if (c == 'N') {
dx = -1;
} else if (c == 'S') {
dx = 1;
} else if (c == '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;
}
}
}
还全是0