cf C. Magic Formulas
10098 ワード
http://codeforces.com/contest/424/problem/C
View Code
1 #include <cstdio>
2 #include <cstring>
3 #include <iostream>
4 #include <algorithm>
5 #define maxn 1000001
6 using namespace std;
7
8 int f[maxn],n;
9 long long a[maxn];
10 void inti()
11 {
12 f[0]=0;
13 f[1]=1;
14 for(int i=2; i<=maxn; i++)
15 {
16 f[i]=f[i-1]^i;
17 }
18 }
19 int main()
20 {
21 inti();
22 scanf("%d",&n);
23 cin>>a[0];
24 long long sum=a[0];
25 for(int i=1; i<n; i++)
26 {
27 cin>>a[i];
28 sum^=a[i];
29 }
30 for(int i=0; i<n; i++)
31 {
32 if(i==0) sum^=0;
33 else
34 {
35 int m1=n%(i+1);
36 int m2=n/(i+1);
37 if(m2%2==0)
38 {
39 if(m1==0)
40 {
41 if(i+1==n)
42 {
43 sum^=(f[i]^0);
44 }
45 else
46 {
47 sum^=0;
48 }
49 }
50 else
51 {
52 sum^=f[m1];
53 }
54 }
55 else
56 {
57 int m3=f[i]^0;
58 if(m1==0)
59 {
60 if(i+1==n)
61 {
62 sum^=(f[i]^0);
63 }
64 else
65 {
66 sum^=(f[i]^0);
67 }
68 }
69 else
70 {
71 sum^=(f[m1]);
72 sum^=(f[i]^0);
73 }
74 }
75 }
76 }
77 cout<<sum<<endl;
78 return 0;
79 }
View Code