Codeforces Round #242 (Div. 2) C Magic Formulas
4347 ワード
表を打って、1から下までのすべての数のXOR値を記録すればいいです
1 #include <iostream>
2 #include <stdio.h>
3 #include <string.h>
4 using namespace std;
5 int array[1000001];
6 int main(){
7 int cnt, i, j, k, t, n, num;
8 int temp = 0;
9 for(k = 0 ;k <= 1000000 ; k++){
10 temp ^= k;
11 array[k] = temp;
12 }
13 while(EOF != scanf("%d",&n)){
14 cnt = 0;
15 for(i = 1; i <= n; i++){
16 scanf("%d",&num);
17 cnt ^= num;
18 }
19 for(i = 1 ;i <= n; i++){
20 int tmp_q = n / i;
21 int tmp_w = n % i;
22 while(tmp_q--){
23 cnt ^= array[i-1];
24 }
25 if(tmp_w)
26 cnt ^= array[tmp_w];
27 }
28 printf("%d
",cnt);
29 }
30 return 0;
31 }