Submission #1274458

#TimeUsernameProblemLanguageResultExecution timeMemory
1274458huhuhuhuhuMađioničar (COI22_madionicar)C++20
0 / 100
275 ms1764 KiB
#include <bits/stdc++.h> using namespace std; bool palindrome(long long l, long long r) { cout << "? " << l+1 << " " << r+1 << endl; cout << flush; long long ans = 0; cin >> ans; return ans == 1; } long long n, ans = 0; long long len[200005]; int main() { cin >> n; long long center = 0, right = -1; for (int i = 0; i < n * 2 + 1; i++) { if (i > right) { center = i; right = i; long long nr = i + 1; while (nr < n * 2 + 1) { long long left = center * 2 - nr; if (left < 0) { break; } if (nr % 2 == 1 && !palindrome(left/2, nr/2)) { break; } right = nr; nr++; } len[i] = right - center; } else { long long mirror = 2 * center - i; long long nr = 0; // cout << "hi" << endl; if (mirror < 0) { center = i; right = i; goto calc; } if (i + len[mirror] >= right) { center = i; right = i + len[mirror]; goto calc; } goto ends; calc: nr = right + 1; while (nr < n * 2 + 1) { long long left = center * 2 - nr; if (left < 0) { break; } if (nr % 2 == 1 && !palindrome(left/2, nr/2)) { break; } right = nr; nr++; } len[i] = center - right; continue; ends: len[i] = len[mirror]; } if (i % 2 == 0) { ans = max(ans, len[i] / 2); } else { ans = max(ans, 1 + len[i]/2); } } cout << ans << endl; cout << flush; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...