結果
問題 | No.246 質問と回答 |
ユーザー |
![]() |
提出日時 | 2019-09-03 21:04:01 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 58 ms / 2,000 ms |
コード長 | 4,235 bytes |
コンパイル時間 | 885 ms |
コンパイル使用メモリ | 101,432 KB |
実行使用メモリ | 25,476 KB |
平均クエリ数 | 30.90 |
最終ジャッジ日時 | 2024-07-16 20:22:09 |
合計ジャッジ時間 | 4,286 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 30 |
ソースコード
/*このコード、と~おれ!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;}