Download docker_space/frontier_cs_2/examples/grok4fastreasoning_1.cpp from JustinTX/shinka-backup: direct link, hf CLI and curl.
- Browser
- Download file 2.75 kB
-
https://huggingface.co/JustinTX/shinka-backup/resolve/main/docker_space/frontier_cs_2/examples/grok4fastreasoning_1.cpp
- Command line
-
hf download hf://JustinTX/shinka-backup/docker_space/frontier_cs_2/examples/grok4fastreasoning_1.cpp
-
curl -L -o grok4fastreasoning_1.cpp https://huggingface.co/JustinTX/shinka-backup/resolve/main/docker_space/frontier_cs_2/examples/grok4fastreasoning_1.cpp
2.75 kB
| using namespace std; | |
| int main() { | |
| int n; | |
| scanf("%d", &n); | |
| if (n == 1) { | |
| printf("1 1\n"); | |
| fflush(stdout); | |
| return 0; | |
| } | |
| auto ask = [&](const vector<int>& qq) -> int { | |
| printf("0"); | |
| for (int i = 1; i <= n; ++i) { | |
| printf(" %d", qq[i]); | |
| } | |
| printf("\n"); | |
| fflush(stdout); | |
| int x; | |
| scanf("%d", &x); | |
| return x; | |
| }; | |
| vector<int> s(n + 1); | |
| mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); | |
| bool found = false; | |
| int attempts = 0; | |
| while (!found && attempts < 30) { | |
| vector<int> q(n + 1); | |
| for (int i = 1; i <= n; ++i) q[i] = i; | |
| shuffle(q.begin() + 1, q.begin() + n + 1, rng); | |
| int x = ask(q); | |
| if (x == 0) { | |
| s = q; | |
| found = true; | |
| } | |
| ++attempts; | |
| } | |
| assert(found); | |
| vector<int> signature(n + 1, 0); | |
| for (int kk = 1; kk <= n; ++kk) { | |
| int bits = 0; | |
| for (int b = 0; b < 9; ++b) { | |
| vector<int> qq(n + 1); | |
| for (int i = 1; i <= n; ++i) qq[i] = s[i]; | |
| for (int i = 1; i <= n; ++i) { | |
| if (((i - 1) & (1 << b)) != 0) { | |
| qq[i] = kk; | |
| } | |
| } | |
| int x = ask(qq); | |
| if (x != 0) { | |
| bits |= (1 << b); | |
| } | |
| } | |
| signature[kk] = bits; | |
| } | |
| vector<vector<int>> groups(512); | |
| for (int kk = 1; kk <= n; ++kk) { | |
| int r = signature[kk]; | |
| groups[r].push_back(kk); | |
| } | |
| vector<int> perm(n + 1); | |
| for (int r = 0; r < 512; ++r) { | |
| auto& ks = groups[r]; | |
| if (ks.empty()) continue; | |
| vector<int> poss; | |
| int base_val = r; | |
| for (int k = 0;; ++k) { | |
| int ii = base_val + 1 + 512 * k; | |
| if (ii > n) break; | |
| poss.push_back(ii); | |
| } | |
| int num = ks.size(); | |
| assert((int)poss.size() == num); | |
| if (num == 1) { | |
| int i = poss[0]; | |
| int kk = ks[0]; | |
| perm[i] = kk; | |
| } else { | |
| int i1 = poss[0]; | |
| int i2 = poss[1]; | |
| int k1 = ks[0]; | |
| int k2 = ks[1]; | |
| if (k1 > k2) swap(k1, k2); | |
| vector<int> qq(n + 1); | |
| for (int j = 1; j <= n; ++j) qq[j] = s[j]; | |
| qq[i1] = k1; | |
| int x = ask(qq); | |
| if (x == 1) { | |
| perm[i1] = k1; | |
| perm[i2] = k2; | |
| } else { | |
| perm[i1] = k2; | |
| perm[i2] = k1; | |
| } | |
| } | |
| } | |
| printf("1"); | |
| for (int i = 1; i <= n; ++i) { | |
| printf(" %d", perm[i]); | |
| } | |
| printf("\n"); | |
| fflush(stdout); | |
| return 0; | |
| } |