Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma optimization_level 3
- #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- #include <iostream>
- #include <algorithm>
- #include <fstream>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <functional>
- #include <set>
- #include <map>
- #include <math.h>
- #include <cmath>
- #include <string>
- #include <time.h>
- #include <random>
- #include <unordered_set>
- #include <unordered_map>
- #include <bitset>
- #include <string.h>
- #include <complex>
- #include <ctime>
- using namespace std;
- #define fast cin.tie(0);cout.tie(0);cin.sync_with_stdio(0);cout.sync_with_stdio(0);
- //#define cin in
- //#define cout out
- #define pii pair<int,int>
- //#define ll long long
- #define db double
- #define ld long double
- #define uset unordered_set
- #define umap unordered_map
- #define vec vector
- #define ms multiset
- #define pb push_back
- #define pll pair<ll,ll>
- #define pdd pair<ld, ld>
- #define pq priority_queue
- #define umap unordered_map
- #define uset unordered_set
- #define pnn pair<Node*, Node*>
- #define uid uniform_int_distribution
- typedef long long ll;
- typedef unsigned int uint;
- ifstream in("input.txt");
- ofstream out("output.txt");
- void bin_guess(int i, int n) {
- int dif = n - i;
- int l = n-1, r = n;
- while (r - l > 1) {
- int mid = (l + r) / 2;
- cout << "? " << mid << ' ' << mid + dif << '\n';
- cout.flush();
- string s;
- cin >> s;
- if (s[0] == 'Y')
- r = mid;
- else
- pl = mid;
- }
- cout << "! " << r << ' ' << r + dif << '\n';
- exit(0);
- }
- int main()
- {
- fast;
- //first - на какой позиции r0, second - какие длины уже проверялись
- queue<pii> q;
- //длины, которые проверялись
- vector<int> lens(10000, 0);
- //правая граница
- int r = 4;
- //число, которое рассматривается
- int n = 2;
- for (; n <= 10000; ) {
- while (!q.empty() && q.front().first < n) {
- lens[q.front().second]--;
- q.pop();
- }
- //перебираем все длины
- for (int len = 1; len < n; len++) {
- if (lens[len] == 0) {
- cout << "? " << r - len << ' ' << r << '\n';
- cout.flush();
- string s;
- cin >> s;
- if (s[0] == 'Y')
- bin_guess(r - len, r);
- q.push({ r, len });
- lens[len]++;
- }
- }
- n++;
- r = 2 * n;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement