Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //============================================================================
- // Name : ANDROUND.cpp
- // Author : Shaka
- // Version :
- // Copyright : Your copyright notice
- // Description : Hello World in C++, Ansi-style
- //============================================================================
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- const int MAXN = 20000;
- const int MAXLOG = 13;
- int table[2][MAXN][MAXLOG], nums[MAXN];
- int logs[(MAXN >> 1) + 1];
- inline void compute_logs() {
- register int e = 0, i;
- for (i = 2, logs[1] = 0; i <= 10000; ++i)
- logs[i] = ((i == 1 << (e + 1)) ? ++e : e);
- }
- int main() {
- register int cas, N, K, i, j, x, k, l, ans;
- compute_logs();
- for (scanf("%d", &cas); cas--;) {
- scanf("%d %d", &N, &K);
- for (i = 0; i < N; ++i)
- scanf("%d", nums + i);
- K = min(K, N >> 1);
- for (i = 0; i < N; ++i) {
- table[0][i][0] = nums[i] & nums[(i + 1) % N];
- table[1][i][0] = nums[i] & nums[(i - 1 + N) % N];
- }
- for (j = 1; (x = 1 << j) <= K; ++j)
- for (i = 0; i < N; ++i) {
- table[0][i][j] = table[0][i][j - 1] & table[0][(i + x) % N][j - 1];
- table[1][i][j] = table[1][i][j - 1] & table[1][(i - x + N) % N][j - 1];
- }
- for(i = 0; i < N; ++i){
- x = 1 << (l = logs[K]);
- j = (i + K - x) % N;
- k = (i - K + x + N) % N;
- ans = table[0][i][l] & table[0][j][l] & table[1][i][l]& table[1][k][l];
- printf("%d%c", ans, i == N - 1 ? '\n' : ' ');
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement