Submission #22369

#TimeUsernameProblemLanguageResultExecution timeMemory
22369AcornCkiGs14004Team (#40)Window Xor (KRIII5_WX)C++11
7 / 7
376 ms2800 KiB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <math.h>
#include <assert.h>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <algorithm>
#include <iostream>
#include <functional>

using namespace std;
typedef long long ll;
typedef pair<int, int> Pi;
#define Fi first
#define Se second
#define pb(x) push_back(x)
#define sz(x) (int)x.size()
#define rep(i, n) for(int i=0;i<n;i++)
#define all(x) x.begin(), x.end()

int N, K;
int Y[100010];
int Z[100010];

int gc(int x, int y){return y == 0 ? x : gc(y, x % y); }

void Do(int x){
	int g = gc(x, N);
	for(int q=0;q<g;q++){
		int tk = K % (2 * N / g);
		int C = 0;
		for(int i=0;i<tk;i++){
			int t = (ll)(q + (ll)i * x) % N;
			C ^= Y[t];
		}
		Z[q] = C;
		for(int i=(x+q)%N;i!=q;i=(i+x)%N){
			Z[i] = Z[(i+N-x)%N];
			Z[i] ^= Y[(i+N-x)%N];
			Z[i] ^= Y[(i+N-x+(ll)tk*x) % N];
		}
	}
	rep(i, N)Y[i] = Z[i], Z[i] = 0;
}

void solve(int tc){
	scanf("%d%d", &N, &K);
	ll T; scanf("%lld", &T);
	for(int i=0;i<N;i++)scanf("%d", Y+i);
	int tmp = 1;
	while(T){
		if(T & 1){
			Do(tmp);
		}
		tmp = (tmp + tmp) % N;
		T >>= 1;
	}
	for(int i=0;i<N;i++)printf("%d ", Y[i]); puts("");
}

int main(){
	int Tc = 1; //scanf("%d", &Tc);
	for(int tc=1; tc<=Tc; tc++){
		solve(tc);
	}
	return 0;
}

Compilation message (stderr)

WX.cpp: In function 'void solve(int)':
WX.cpp:51:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &K);
                       ^
WX.cpp:52:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  ll T; scanf("%lld", &T);
                         ^
WX.cpp:53:38: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=0;i<N;i++)scanf("%d", Y+i);
                                      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...