結果

問題 No.246 質問と回答
ユーザー 👑 nullnull
提出日時 2019-09-03 21:04:01
言語 C++14
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 41 ms / 2,000 ms
コード長 4,235 bytes
コンパイル時間 995 ms
コンパイル使用メモリ 99,216 KB
実行使用メモリ 24,324 KB
平均クエリ数 30.90
最終ジャッジ日時 2023-09-23 20:32:34
合計ジャッジ時間 3,718 ms
ジャッジサーバーID
(参考情報)
judge15 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 41 ms
24,216 KB
testcase_01 AC 37 ms
23,376 KB
testcase_02 AC 37 ms
23,844 KB
testcase_03 AC 39 ms
23,484 KB
testcase_04 AC 37 ms
23,532 KB
testcase_05 AC 37 ms
23,988 KB
testcase_06 AC 36 ms
23,364 KB
testcase_07 AC 37 ms
23,832 KB
testcase_08 AC 39 ms
24,204 KB
testcase_09 AC 38 ms
23,352 KB
testcase_10 AC 37 ms
23,472 KB
testcase_11 AC 37 ms
23,412 KB
testcase_12 AC 38 ms
23,340 KB
testcase_13 AC 37 ms
23,568 KB
testcase_14 AC 38 ms
23,988 KB
testcase_15 AC 36 ms
23,352 KB
testcase_16 AC 38 ms
23,952 KB
testcase_17 AC 37 ms
23,364 KB
testcase_18 AC 36 ms
23,352 KB
testcase_19 AC 38 ms
23,316 KB
testcase_20 AC 37 ms
23,352 KB
testcase_21 AC 39 ms
23,304 KB
testcase_22 AC 38 ms
23,532 KB
testcase_23 AC 38 ms
23,556 KB
testcase_24 AC 36 ms
23,640 KB
testcase_25 AC 36 ms
24,324 KB
testcase_26 AC 36 ms
23,400 KB
testcase_27 AC 36 ms
23,964 KB
testcase_28 AC 37 ms
24,204 KB
testcase_29 AC 38 ms
23,928 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

/*
このコード、と~おれ!
Be accepted!
∧_∧ 
(。・ω・。)つ━☆・*。
⊂   ノ    ・゜+.
 しーJ   °。+ *´¨)
          .· ´¸.·*´¨) ¸.·*¨)
		            (¸.·´ (¸.·'* ☆
					*/

#include <stdio.h>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstring>
#include <vector>
#include <numeric>
#include <iostream>
#include <random>
#include <map>

#pragma GCC optimize("Ofast")
#define rep(i, n) for(int i = 0; i < (n); ++i)
#define rep1(i, n) for(int i = 1; i <= (n); ++i)
#define repr(i, n) for(int i = n; i >= 0; --i)
#define reprm(i, n) for(int i = n - 1; i >= 0; --i)
#define printynl(a) printf(a ? "yes\n" : "no\n")
#define printyn(a) printf(a ? "Yes\n" : "No\n")
#define printYN(a) printf(a ? "YES\n" : "NO\n")
#define printin(a) printf(a ? "possible\n" : "inposible\n")
#define printdb(a) printf("%.16f\n", a)//少数出力
#define all(x) (x).begin(), (x).end()

using ll = long long;

const int INF = 2147483647;
const ll LINF = ll(9223372036854775807);
const ll MOD = 1000000007;
const double PI = acos(-1);

//マクロとかここまで

using namespace std;

int ggd(int number1, int number2) {//ggcを求める
	int m = number1;
	int n = number2;

	if (number2 > number1) {
		m = number2;
		n = number1;
	}

	while (m != n) {
		int temp = n;
		n = m - n;
		m = temp;
	}

	return m;
}

int lcm(int number1, int number2) {//lcmを求める
	return number1 * number2 / ggd(number1, number2);
}

bool is_prime(int64_t x) {//素数判定
	for (int64_t i = 2; i * i <= x; i++) {
		if (x % i == 0) return false;
	}
	return true;
}

ll nearPow2(ll n)//x以上の2のべき乗を返す
{
	// nが0以下の時は0とする。
	if (n <= 0) return 0;

	// (n & (n - 1)) == 0 の時は、nが2の冪乗であるため、そのままnを返す。
	if ((n & (n - 1)) == 0) return ll(n);

	// bitシフトを用いて、2の冪乗を求める。
	ll ret = 1;
	while (n > 0) { ret <<= 1; n >>= 1; }
	return ret;
}



map< int64_t, int > prime_factor(int64_t n) {//素因数分解
	map< int64_t, int > ret;
	for (int64_t i = 2; i * i <= n; i++) {
		while (n % i == 0) {
			ret[i]++;
			n /= i;
		}
	}
	if (n != 1) ret[n] = 1;
	return ret;
}

template< int mod >
struct ModInt {
	int x;

	ModInt() : x(0) {}

	ModInt(int64_t y) : x(y >= 0 ? y % mod : (mod - (-y) % mod) % mod) {}

	ModInt& operator+=(const ModInt& p) {
		if ((x += p.x) >= mod) x -= mod;
		return *this;
	}

	ModInt& operator-=(const ModInt& p) {
		if ((x += mod - p.x) >= mod) x -= mod;
		return *this;
	}

	ModInt& operator*=(const ModInt& p) {
		x = (int)(1LL * x * p.x % mod);
		return *this;
	}

	ModInt& operator/=(const ModInt& p) {
		*this *= p.inverse();
		return *this;
	}

	ModInt operator-() const { return ModInt(-x); }

	ModInt operator+(const ModInt& p) const { return ModInt(*this) += p; }

	ModInt operator-(const ModInt& p) const { return ModInt(*this) -= p; }

	ModInt operator*(const ModInt& p) const { return ModInt(*this) *= p; }

	ModInt operator/(const ModInt& p) const { return ModInt(*this) /= p; }

	bool operator==(const ModInt& p) const { return x == p.x; }

	bool operator!=(const ModInt& p) const { return x != p.x; }

	ModInt inverse() const {
		int a = x, b = mod, u = 1, v = 0, t;
		while (b > 0) {
			t = a / b;
			swap(a -= t * b, b);
			swap(u -= t * v, v);
		}
		return ModInt(u);
	}

	ModInt pow(int64_t n) const {
		ModInt ret(1), mul(x);
		while (n > 0) {
			if (n & 1) ret *= mul;
			mul *= mul;
			n >>= 1;
		}
		return ret;
	}

	friend ostream& operator<<(ostream& os, const ModInt& p) {
		return os << p.x;
	}

	friend istream& operator>>(istream& is, ModInt& a) {
		int64_t t;
		is >> t;
		a = ModInt< mod >(t);
		return (is);
	}

	static int get_mod() { return mod; }
};

using modint = ModInt< MOD >;//MOD=10億7

/*-----------------------------------------ここまでライブラリとか-----------------------------------------*/



int main() {

	int r = 1e9, l = 1, m = (r + l) / 2, ans;
	while (r - l > 1) {
		printf("? %d\n", m);
		fflush(stdout);
		scanf("%d", &ans);
		if (ans) {
			l = m;
		}
		else {
			r = m;
		}
		m = (r + l) / 2;
	}

	printf("! %d\n", l);
	fflush(stdout);

	return 0;
}
0