結果
| 問題 | No.594 壊れた宝物発見機 | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2020-10-11 23:00:55 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 116 ms / 2,000 ms | 
| コード長 | 845 bytes | 
| コンパイル時間 | 596 ms | 
| コンパイル使用メモリ | 64,980 KB | 
| 最終ジャッジ日時 | 2025-01-15 06:45:36 | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 20 | 
コンパイルメッセージ
main.cpp: In function ‘int Q(const std::vector<int>&)’:
main.cpp:25:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   25 |         scanf("%d",&n);
      |         ~~~~~^~~~~~~~~
            
            ソースコード
#include <functional>
#include <vector>
#include <cstdio>
template<typename T,typename F>
T ternarysearch(T lo,T hi,const T eps,const F &predicate){
	for(;lo+eps<hi;){
		T mi=eps!=1||(lo<0)==(hi<0) ? lo+(hi-lo)/2 : (lo<-hi) ? -((-lo-hi-1)/2+1) : (lo+hi)/2;
		if(predicate(mi-eps)<predicate(mi)){
			hi=mi;
		}else{
			lo=mi;
		}
	}
	return lo;
}
template<typename T,typename F=std::function<T(T)>>
T ternarysearch(T lo,T hi,const F &predicate){return ternarysearch(lo,hi,(T)1,predicate);}
int Q(const std::vector<int>&v){
	printf("?");
	for(auto &e:v)printf(" %d",e);
	puts("");
	fflush(stdout);
	int n;
	scanf("%d",&n);
	return n;
}
int main(){
	std::vector<int>v(3);
	for(int i=0;i<3;i++)v[i]=ternarysearch(-150,151,[&](int n){
		std::vector<int>a(3);
		a[i]=n;
		return Q(a);
	});
	printf("!");
	for(auto &e:v)printf(" %d",e);
	puts("");
}
            
            
            
        