fork download
  1. #pragma GCC optimize ("Ofast")
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. template<class S, class T> inline S max_L(S a,T b){
  5. return a>=b?a:b;
  6. }
  7. inline int my_getchar_unlocked(){
  8. static char buf[1048576];
  9. static int s = 1048576;
  10. static int e = 1048576;
  11. if(s == e && e == 1048576){
  12. e = fread_unlocked(buf, 1, 1048576, stdin);
  13. s = 0;
  14. }
  15. if(s == e){
  16. return EOF;
  17. }
  18. return buf[s++];
  19. }
  20. inline void rd(int &x){
  21. int k;
  22. int m=0;
  23. x=0;
  24. for(;;){
  25. k = my_getchar_unlocked();
  26. if(k=='-'){
  27. m=1;
  28. break;
  29. }
  30. if('0'<=k&&k<='9'){
  31. x=k-'0';
  32. break;
  33. }
  34. }
  35. for(;;){
  36. k = my_getchar_unlocked();
  37. if(k<'0'||k>'9'){
  38. break;
  39. }
  40. x=x*10+k-'0';
  41. }
  42. if(m){
  43. x=-x;
  44. }
  45. }
  46. inline void rd(double &x){
  47. int k;
  48. int m=0;
  49. int p=0;
  50. double r = 1;
  51. x = 0;
  52. for(;;){
  53. k = my_getchar_unlocked();
  54. if(k=='-'){
  55. m = 1;
  56. break;
  57. }
  58. if(k=='.'){
  59. p = 1;
  60. break;
  61. }
  62. if('0'<=k&&k<='9'){
  63. x = k - '0';
  64. break;
  65. }
  66. }
  67. for(;;){
  68. k = my_getchar_unlocked();
  69. if(k=='.'){
  70. p = 1;
  71. continue;
  72. }
  73. if(k<'0'||k>'9'){
  74. break;
  75. }
  76. if(p){
  77. r *= 0.1;
  78. x += r * (k - '0');
  79. }
  80. else{
  81. x = x * 10 + k - '0';
  82. }
  83. }
  84. if(m){
  85. x = -x;
  86. }
  87. }
  88. struct MY_WRITER{
  89. char buf[1048576];
  90. int s;
  91. int e;
  92. MY_WRITER(){
  93. s = 0;
  94. e = 1048576;
  95. }
  96. ~MY_WRITER(){
  97. if(s){
  98. fwrite_unlocked(buf, 1, s, stdout);
  99. }
  100. }
  101. }
  102. ;
  103. MY_WRITER MY_WRITER_VAR;
  104. void my_putchar_unlocked(int a){
  105. if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){
  106. fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);
  107. MY_WRITER_VAR.s = 0;
  108. }
  109. MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;
  110. }
  111. inline void wt_L(char a){
  112. my_putchar_unlocked(a);
  113. }
  114. int WRITER_DOUBLE_DIGIT = 15;
  115. inline int writerDigit_double(){
  116. return WRITER_DOUBLE_DIGIT;
  117. }
  118. inline void writerDigit_double(int d){
  119. WRITER_DOUBLE_DIGIT = d;
  120. }
  121. inline void wt_L(double x){
  122. const int d = WRITER_DOUBLE_DIGIT;
  123. int k;
  124. int r;
  125. double v;
  126. if(x!=x || (x==x+1 && x==2*x)){
  127. my_putchar_unlocked('E');
  128. my_putchar_unlocked('r');
  129. my_putchar_unlocked('r');
  130. return;
  131. }
  132. if(x < 0){
  133. my_putchar_unlocked('-');
  134. x = -x;
  135. }
  136. x += 0.5 * pow(0.1, d);
  137. r = 0;
  138. v = 1;
  139. while(x >= 10*v){
  140. v *= 10;
  141. r++;
  142. }
  143. while(r >= 0){
  144. r--;
  145. k = floor(x / v);
  146. if(k >= 10){
  147. k = 9;
  148. }
  149. if(k <= -1){
  150. k = 0;
  151. }
  152. x -= k * v;
  153. v *= 0.1;
  154. my_putchar_unlocked(k + '0');
  155. }
  156. if(d > 0){
  157. my_putchar_unlocked('.');
  158. v = 1;
  159. for(r=(0);r<(d);r++){
  160. v *= 0.1;
  161. k = floor(x / v);
  162. if(k >= 10){
  163. k = 9;
  164. }
  165. if(k <= -1){
  166. k = 0;
  167. }
  168. x -= k * v;
  169. my_putchar_unlocked(k + '0');
  170. }
  171. }
  172. }
  173. int N;
  174. double S;
  175. double A[100000];
  176. double B[100000];
  177. double C[100000];
  178. int main(){
  179. int i;
  180. double res = 0;
  181. double d;
  182. double us;
  183. double tmp;
  184. rd(N);
  185. rd(S);
  186. {
  187. int Lj4PdHRW;
  188. for(Lj4PdHRW=(0);Lj4PdHRW<(N);Lj4PdHRW++){
  189. rd(A[Lj4PdHRW]);
  190. rd(B[Lj4PdHRW]);
  191. rd(C[Lj4PdHRW]);
  192. }
  193. }
  194. double e98WHCEY;
  195. double cTE1_r3A;
  196. double RZTsC2BF;
  197. e98WHCEY = 0;
  198. cTE1_r3A = 2e9;
  199. for(;;){
  200. int i;
  201. RZTsC2BF = (e98WHCEY + cTE1_r3A) / 2;
  202. if(RZTsC2BF == e98WHCEY || RZTsC2BF == cTE1_r3A){
  203. break;
  204. }
  205. us = 0;
  206. for(i=(0);i<(N);i++){
  207. tmp =max_L((RZTsC2BF - B[i]) / (2*A[i]), 0);
  208. us += tmp;
  209. }
  210. if(us < S){
  211. cTE1_r3A = RZTsC2BF;
  212. }
  213. else{
  214. e98WHCEY = RZTsC2BF;
  215. }
  216. }
  217. d =((e98WHCEY + cTE1_r3A) / 2);
  218. for(i=(0);i<(N);i++){
  219. tmp =max_L((d - B[i]) / (2*A[i]), 0);
  220. res += A[i] * tmp * tmp + B[i] * tmp + C[i];
  221. }
  222. wt_L(res);
  223. wt_L('\n');
  224. return 0;
  225. }
  226. // cLay varsion 20201102-1
  227.  
  228. // --- original code ---
  229. // int N;
  230. // double S, A[1d5], B[1d5], C[1d5];
  231. // {
  232. // double res = 0, d, us, tmp;
  233. // rd(N,S,(A,B,C)(N));
  234. // d = bsearch_min[double,d,0,2e9][
  235. // us = 0;
  236. // rep(i,N){
  237. // tmp = max((d - B[i]) / (2*A[i]), 0);
  238. // us += tmp;
  239. // }
  240. // ](us < S);
  241. // rep(i,N){
  242. // tmp = max((d - B[i]) / (2*A[i]), 0);
  243. // res += A[i] * tmp * tmp + B[i] * tmp + C[i];
  244. // }
  245. // wt(res);
  246. // }
  247.  
Time limit exceeded #stdin #stdout 5s 4296KB
stdin
Standard input is empty
stdout
Standard output is empty