結果
| 問題 | No.456 Millions of Submits! |
| コンテスト | |
| ユーザー |
rickytheta
|
| 提出日時 | 2016-12-08 10:44:54 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,982 bytes |
| 記録 | |
| コンパイル時間 | 1,334 ms |
| コンパイル使用メモリ | 159,260 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-23 08:35:34 |
| 合計ジャッジ時間 | 4,058 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 13 |
コンパイルメッセージ
main.cpp: In function ‘void read(double&)’:
main.cpp:46:34: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
46 | inline void read(double &x){scanf("%lf",&x);}
| ~~~~~^~~~~~~~~~
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef int _loop_int;
#define __GET_REP_MACRO(_1,_2,_3,NAME,...) NAME
#define __REP0(i,n) for(_loop_int i=0;i<(n);++i)
#define __REP1(i,a,b) for(_loop_int i=(a);i<(b);++i)
#define __REPR0(i,n) for(_loop_int i=(n)-1;i>=0;--i)
#define __REPR1(i,a,b) for(_loop_int i=(b)-1;i>=(a);--i)
#define REP(...) __GET_REP_MACRO(__VA_ARGS__,__REP1,__REP0)(__VA_ARGS__)
#define REPR(...) __GET_REP_MACRO(__VA_ARGS__,__REPR1,__REPR0)(__VA_ARGS__)
#ifdef BURI
#define __DEBUG0() "Hello"
#define __DEBUG1(x) #x"("<<(x)<<")"
#define __DEBUG2(x,...) #x"("<<(x)<<"), " __DEBUG1(__VA_ARGS__)
#define __DEBUG3(x,...) #x"("<<(x)<<"), " __DEBUG2(__VA_ARGS__)
#define __DEBUG4(x,...) #x"("<<(x)<<"), " __DEBUG3(__VA_ARGS__)
#define __DEBUG5(x,...) #x"("<<(x)<<"), " __DEBUG4(__VA_ARGS__)
#define __GET_DEBUG_MACRO(_1,_2,_3,_4,_5,NAME,...) NAME
#define __DEBUG(...) __GET_DEBUG_MACRO(__VA_ARGS__,__DEBUG5,__DEBUG4,__DEBUG3, \
__DEBUG2,__DEBUG1,__DEBUG0)(__VA_ARGS__)
#define DEBUG(...) cerr<<__DEBUG(__VA_ARGS__)<<endl
#else
#define DEBUG(...)
#endif
#define ALL(a) (a).begin(),(a).end()
#define CHMIN(a,b) a=min((a),(b))
#define CHMAX(a,b) a=max((a),(b))
#define __my_getchar getchar_unlocked
inline void getll(ll &x){
bool neg=false;x=0;char c;
while((c=__my_getchar())!='-'&&(c<'0'||c>'9'));
if(c=='-') neg=true; else x=c-'0';
while('0'<=(c=__my_getchar())&&c<='9')x=10*x+(c-'0');
if(neg)x=-x;
}
inline void read(ll &x){getll(x);}
inline void read(int &x){ll y;getll(y);x=y;}
inline void read(float &x){scanf("%f",&x);}
inline void read(double &x){scanf("%lf",&x);}
inline void read(long double &x){scanf("%Lf",&x);}
inline void read(char *s){scanf("%s",s);}
inline void read(string &s){int len=s.size();char *buf=(char*)malloc(len*sizeof(char));scanf("%s",buf);s=string(buf);free(buf);}
inline void read(char &c){char *buf=(char*)malloc(5*sizeof(char));scanf("%s",buf);c=buf[0];free(buf);}
inline void read(){}
template<typename S,typename ...T>
inline void read(S& first, T&... rest){
read(first);
read(rest...);
}
inline void lambert(double &w, double &z){
// w exp(w) = tt
// log w + w - z = 0
// 1/w + w
double up = log(w) + w - z;
double down = 1.0/w + w;
w -= up/down;
}
int main(){
// x = exp(b/a * W(a/b * pow(t,1/b)))
int m;
int a,b;
double t;
read(m);
while(m--){
read(a,b,t);
if(b==0){
printf("%.11f\n",pow(t,1.0/a));
}else if(a==0){
printf("%.11f\n",exp(pow(t,1.0/b)));
}else{
double binv = 1.0/b;
double a_b = binv*a;
double tt = a_b * pow(t,binv);
// lambert w function iteration
double logt = log(tt);
double w = logt;
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
lambert(w,logt);
printf("%.11f\n",exp(w / a_b));
}
}
return 0;
}
rickytheta