WA on #4,#8求hack
查看原帖
WA on #4,#8求hack
388415
Sudohry楼主2023/3/28 13:58
#include <bits/stdc++.h>

#define rep(i, l, r) for (int i=(l); i<=(r); ++i)
#define per(i, r, l) for (int i=(r); i>=(l); --i)
#define LB() printf ("TAG\n")
#define N ((int)(1e7+5))
#define M 10005
#define INF 0x7fffffff


using namespace std;


template <typename Tp> inline void to_max (Tp &x, const Tp &y) { if (y > x) x = y; return ; }
template <typename Tp> inline void to_min (Tp &x, const Tp &y) { if (y < x) x = y; return ; }
inline int lowbit (const int &x) { return x & (-x) ; }


int n, m, tot = 1, nxt[N], c[N][4];
char s[N], t[M][105];
bool f[N];
queue <int> q;

int modify (char c) {
	if (c == 'E') return 0;
	if (c == 'S') return 1;
	if (c == 'W') return 2;
	if (c == 'N') return 3;
	return -1;
}

void insert (int k) {
	int u = 1, len = strlen (t[k]+1);
	rep (i, 1, len) {
		int e = modify (t[k][i]);
		if (!c[u][e]) c[u][e] = ++tot;
		u = c[u][e];
	}
	return ;
}

void bfs () {
	rep (i, 0, 3) c[0][i] = 1;
	nxt[1] = 0; q.push (1);
	while (!q.empty ()) {
		int u = q.front (); q.pop ();
		rep (i, 0, 3) {
			if (!c[u][i]) c[u][i] = c[nxt[u]][i];
			else {
				q.push (c[u][i]);
				int v = nxt[u];
				while (v > 1 && !c[v][i]) v = nxt[v];
				nxt[c[u][i]] = c[v][i];
			}
		}
	}
	return ;
}

void find () {
	int u = 1;
	rep (i, 1, n) {
		int e = modify (s[i]), v = c[u][e];
		while (v > 1 && !f[v]) {
			f[v] = true;
			v = nxt[v];
		}
		u = c[u][e];
	}
	return ;
}

void count (int k) {
	int u = 1, len = strlen (t[k]+1), ans = 0;
	rep (i, 1, len) {
		int e = modify (t[k][i]);
		u = c[u][e];
		if (f[u]) ans = i;
	}
	printf ("%d\n", ans);
	return ;
}

int main () {
	scanf ("%d%d", &n, &m);
	scanf ("%s", s+1);
	rep (i, 1, m) {
		scanf ("%s", t[i]+1);
		insert (i);
	}
	bfs (); find ();
	rep (i, 1, m) count (i);
	return 0;
}

/*

7 3
SNNSSNS
NNSS
NNN
WSEE


*/
2023/3/28 13:58
加载中...