結果
問題 | No.456 Millions of Submits! |
ユーザー | kuuso1 |
提出日時 | 2016-12-08 22:20:55 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 3,042 ms / 4,500 ms |
コード長 | 5,646 bytes |
コンパイル時間 | 1,049 ms |
コンパイル使用メモリ | 110,720 KB |
実行使用メモリ | 120,680 KB |
最終ジャッジ日時 | 2024-06-23 16:25:05 |
合計ジャッジ時間 | 11,645 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 29 ms
20,608 KB |
testcase_01 | AC | 30 ms
20,608 KB |
testcase_02 | AC | 30 ms
20,352 KB |
testcase_03 | AC | 31 ms
20,608 KB |
testcase_04 | AC | 31 ms
20,736 KB |
testcase_05 | AC | 30 ms
20,736 KB |
testcase_06 | AC | 29 ms
20,864 KB |
testcase_07 | AC | 33 ms
20,864 KB |
testcase_08 | AC | 31 ms
20,864 KB |
testcase_09 | AC | 58 ms
22,144 KB |
testcase_10 | AC | 59 ms
21,888 KB |
testcase_11 | AC | 326 ms
33,280 KB |
testcase_12 | AC | 3,042 ms
120,680 KB |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; class TEST{ static void Main(){ Sol mySol =new Sol(); mySol.Solve(); } } class Sol{ public void Solve(){ String[] Ans = new String[M]; Parallel.For(0,M,i=>{ //for(int i=0;i<M;i++){ double a = A[i]; double b = B[i]; double t = T[i]; //Console.WriteLine("{0} {1} {2}",a,b,t); Func<double,double> f = x => a * Math.Log(x) + b * Math.Log(Math.Log(x)) - Math.Log(t); Func<double,double> df = x => a / x + b / x / Math.Log(x); double xx = 1 + 1e-12; if(B[i] == 0){ xx = Math.Pow(t,1.0/a); }else if(A[i] == 0){ xx = Math.Exp(Math.Pow(t,1.0/b)); }else{ for(int j=0;j<20;j++){ var yy = xx - (a * Math.Log(xx) + b * Math.Log(Math.Log(xx)) - Math.Log(t)) / ( a / xx + b / xx / Math.Log(xx)); if(yy - xx < 1e-12)break; xx = yy; } } //Console.WriteLine("{0},{1},{2},{3},{4}",a,b,t,xx,f(xx)+t); Ans[i] = String.Format("{0:F11}",xx); //} }); Console.WriteLine(String.Join("\n",Ans)); } int M; int[] A,B; double[] T; public Sol(){ using(var r = new FastIn(1000000)){ M = r.ReadInt(); A = new int[M]; B = new int[M]; T = new double[M]; for(int i=0;i<M;i++){ A[i] = r.ReadInt(); B[i] = r.ReadInt(); T[i] = r.ReadDouble(); } } } static double Newton(double x, Func<double,double> f, Func<double,double> df) { // f(x)=0 => ret x-f(x)/df(x); return x - f(x)/df(x); } static String rs(){return Console.ReadLine();} static int ri(){return int.Parse(Console.ReadLine());} static long rl(){return long.Parse(Console.ReadLine());} static double rd(){return double.Parse(Console.ReadLine());} static String[] rsa(char sep=' '){return Console.ReadLine().Split(sep);} static int[] ria(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>int.Parse(e));} static long[] rla(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>long.Parse(e));} static double[] rda(char sep=' '){return Array.ConvertAll(Console.ReadLine().Split(sep),e=>double.Parse(e));} } class FastIn:IDisposable { int Size; byte[] Mem; int ptr; int rsize; bool unfinished; Stream stdin; void Init(int n) { Size = n; Mem = new byte[Size]; rsize=(stdin=Console.OpenStandardInput()).Read(Mem, 0, Size); ptr = 0; unfinished=(rsize == Size); } void Next() { if (unfinished == false) return; rsize=stdin.Read(Mem, 0, Size); ptr = 0; unfinished = (rsize == Size); } ~FastIn(){ stdin.Dispose(); } void IDisposable.Dispose(){ stdin.Dispose(); } public void Dispose(){ stdin.Dispose(); } public FastIn() { Init(100000); } public FastIn(int n) { Init(n); } public int ReadInt() { int ret = 0; int sig = 1; while (ptr < rsize && Mem[ptr] != ' ' && Mem[ptr] != '\n' && Mem[ptr] != '\r' ) { if(ret==0 && Mem[ptr] == '-'){ sig *= -1; ptr++; continue; } ret = ret * 10 + Mem[ptr++] - '0'; if (ptr == Size) Next(); } while (ptr < rsize && (Mem[ptr] == ' ' || Mem[ptr] == '\n' || Mem[ptr] == '\r') ) { ptr++; if (ptr == Size) Next(); } return ret*sig; } public double ReadDouble() { double ret = 0; double sig = 1; bool dot = false; double keta = 0.1; while (ptr < rsize && Mem[ptr] != ' ' && Mem[ptr] != '\n' && Mem[ptr] != '\r' ) { if(ret==0 && Mem[ptr] == '-'){ sig *= -1; ptr++; if (ptr == Size) Next(); continue; } if(Mem[ptr] == '.'){ dot = true; ptr++; if (ptr == Size) Next(); continue; } if(!dot){ ret = ret * 10 + Mem[ptr++] - '0'; if (ptr == Size) Next(); }else{ ret = ret + (Mem[ptr++] - '0')*keta; keta /= 10.0; if (ptr == Size) Next(); } } while (ptr < rsize && (Mem[ptr] == ' ' || Mem[ptr] == '\n' || Mem[ptr] == '\r') ) { ptr++; if (ptr == Size) Next(); } return ret*sig; } public uint ReadUint() { uint ret = 0; uint sig = 1; while (ptr < rsize && Mem[ptr] != ' ' && Mem[ptr] != '\n' && Mem[ptr] != '\r' ) { ret = ret * 10 + Mem[ptr++] - '0'; if (ptr == Size) Next(); } while (ptr < rsize && (Mem[ptr] == ' ' || Mem[ptr] == '\n' || Mem[ptr] == '\r') ) { ptr++; if (ptr == Size) Next(); } return ret*sig; } public long ReadLong() { long ret = 0; long sig = 1; while (ptr < rsize && Mem[ptr] != ' ' && Mem[ptr] != '\n' && Mem[ptr] != '\r' ) { if(ret==0 && Mem[ptr] == '-'){ sig *= -1; ptr++; continue; } ret = ret * 10 + Mem[ptr++] - '0'; if (ptr == Size) Next(); } while (ptr < rsize && (Mem[ptr] == ' ' || Mem[ptr] == '\n' || Mem[ptr] == '\r') ) { ptr++; if (ptr == Size) Next(); } return ret*sig; } public String ReadStr() { //2byte文字はNG StringBuilder sb = new StringBuilder(); while (ptr < rsize && Mem[ptr] != ' ' && Mem[ptr] != '\n' && Mem[ptr] != '\r') { sb.Append((char)Mem[ptr++]); if (ptr == Size && unfinished) Next(); } while (ptr < rsize && (Mem[ptr] == ' ' || Mem[ptr] == '\n' || Mem[ptr] == '\r') ) { ptr++; if (ptr == Size && unfinished) Next(); } return sb.ToString(); } public String ReadLine() { //極力使わない(split/parseするくらいなら上をつかう) StringBuilder sb = new StringBuilder(); while (ptr < rsize && Mem[ptr] != '\n' && Mem[ptr] != '\r') { sb.Append((char)Mem[ptr++]); if (ptr == Size && unfinished) Next(); } while (ptr < rsize && (Mem[ptr] == ' ' || Mem[ptr] == '\n' || Mem[ptr] == '\r')) { ptr++; if (ptr == Size && unfinished) Next(); } return sb.ToString(); } }