about summary refs log tree commit diff
path: root/codechef/marm.cc
diff options
context:
space:
mode:
Diffstat (limited to 'codechef/marm.cc')
-rw-r--r--codechef/marm.cc58
1 files changed, 58 insertions, 0 deletions
diff --git a/codechef/marm.cc b/codechef/marm.cc
new file mode 100644
index 0000000..3866330
--- /dev/null
+++ b/codechef/marm.cc
@@ -0,0 +1,58 @@
+#include <iostream>
+#include <vector>
+
+using namespace std;
+
+int
+main()
+{
+  int t, n;
+  long k;
+
+  cin >> t;
+  while (t--)
+    {
+      cin >> n >> k;
+      long d = k / n, m = k % n;
+      vector<long> a (n);
+      for (int i = 0; i < n; ++i)
+        cin >> a[i];
+
+      for (int i = 0; i < n / 2; ++i)
+        {
+          switch ((d + (m > i)) % 3)
+            {
+            case 1:
+              cout << (a[i] ^ a[n - i - 1]);
+              break;
+            case 2:
+              cout << a[n - i - 1];
+              break;
+            default:
+              cout << a[i];
+            }
+          cout << ' ';
+        }
+
+      if (n % 2)
+        cout << ((d + (m > n >> 1)) ? 0 : a[n >> 1]) << ' ';
+
+      for (int i = n - (n >> 1); i < n; ++i)
+        {
+          switch ((d + (m > i)) % 3)
+            {
+            case 1:
+              cout << a[n - i - 1];
+              break;
+            case 2:
+              cout << (a[i] ^ a[n - i - 1]);
+              break;
+            default:
+              cout << a[i];
+            }
+          cout << ((i + 1 == n) ? '\n' : ' ');
+        }
+    }
+
+  return 0;
+}