样例过了但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;
}
哪位神犇指点一下,万分感谢!