HELP
查看原帖
HELP
300313
_luanyi_楼主2021/8/17 23:59

样例过了但WA 40pts

#include <bits/stdc++.h>
#define forq(i,a,b) for (int i = (a); i <= (b); i++)
#define fornq(i,a,b) for (int i = (a); i < (b); i++)
#define nforq(i,a,b) for (int i = (a); i >= (b); i--)
#define nfornq(i,a,b) for (int i = (a); i > (b); i--)
#define int unsigned long long
using namespace std;
const int inf = -1;
long m, k;
int a[110], b[110], A[110][110], B[110][110], C[110][110];
void mul () {
	memset (C, 0, sizeof C);
	forq (i, 1, k) forq (j, 1, k) forq (l, 1, k) C[i][j] |= A[i][l] & B[l][j];
	memcpy (B, C, sizeof B);
}
void mult () {
	memset (C, 0, sizeof C);
	forq (i, 1, k) forq (j, 1, k) forq (l, 1, k) C[i][j] |= A[i][l] & A[l][j];
	memcpy (A, C, sizeof A);
}
signed main() {
	cin >> m >> k;
	++m;
	forq (i, 1, k) cin >> a[i];
	forq (i, 1, k) cin >> b[i];
	reverse (b + 1, b + k + 1);
	forq (i, 1, k) A[1][i] = b[i];
	fornq (i, 1, k) A[i + 1][i] = inf;
	if (m <= k) cout << a[m], exit (0);
	m -= k;
	forq (i, 1, k) B[i][i] = inf;
	while (m) {
		if (m & 1) mul ();
		mult ();
		m >>= 1;
	}
	int ans = 0;
	forq (i, 1, k) ans |= A[1][i] & a[k - i + 1];
	cout << ans;
	return 0;
}

哪位神犇指点一下,万分感谢!

2021/8/17 23:59
加载中...