結果
問題 | No.253 ロウソクの長さ |
ユーザー |
![]() |
提出日時 | 2017-07-28 19:59:37 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 32 ms / 2,000 ms |
コード長 | 1,955 bytes |
コンパイル時間 | 1,852 ms |
コンパイル使用メモリ | 166,760 KB |
実行使用メモリ | 25,476 KB |
平均クエリ数 | 21.14 |
最終ジャッジ日時 | 2024-07-17 01:21:30 |
合計ジャッジ時間 | 4,895 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 36 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef int32_t h_int32;typedef int64_t h_int64;typedef uint32_t uh_int32;typedef uint64_t uh_int64;typedef h_int64 h_int;#define REP( i, n ) for(int i = 0; i < ( int )( n ); ++i )#define REPR( i, n ) for(int i = ( int )( n ); i >= 0; --i )#define FOR( i, a, n ) for(int i = ( int )( a ); i < ( int )( n ); ++i )#define FORR( i, a, n ) for(int i = ( int )( n ); i >= ( int )( a ); --i)#define ALL( x ) x.begin(), x.end()#define DOUT( x ) cerr << #x << " = " << x << "\n"#define COUT( x ) cout << ( x ) << "\n"#define DOUBLECOUT( num, x ) cout << fixed << setprecision( num ) << ( x ) << "\n"#define INF 999999999#define PI 3.14159265359#ifdef _DEBUGh_int res = 12679;#endifint Ask( h_int num ){cout << "? " << num << endl;int n;#ifdef _DEBUGif(num == res ) n = 0;else if( num < res) n = 1;else if(num > res) n = -1;res--;#elsecin >> n;#endifreturn n;}signed main(){ios::sync_with_stdio( false );cin.tie( 0 );h_int r, l = 0;int cnt = 0;int a = Ask( 100 );if( a == 0){cout << "! 100" << endl;return 0;}else if( a == -1) r = 99;else r = 999999999;++cnt;while(r - l > 1){h_int m = ( l + r ) / 2;a = Ask( m );if( a == 0 ){cout << "! " << m + cnt << endl;return 0;}if(a > 0){l = m;}else{r = m;}--l; --r; ++cnt;}if( Ask( r ) == 0) cout << "! " << r + cnt << endl;else cout << "! " << l + cnt + 1 << endl;return 0;}