/* Pähkinänurkka: Neliöjuuritehtävän jälkipyykki - Skrolli 2018.1 */ #include #include #include #include #include #include using namespace std; const int N = 100; const int K = 25; typedef long double ld; typedef pair P; ld sqrs[N+1]; mt19937 rng(random_device{}()); P* res; P* res2; ld target; ld best=1e100; void addRes(const vector& A, ld score, int mask, int mask2=0) { if (score >= best) return; assert(!isnan(score)); cout<<"new best "<>i) cout<<1+i<<", "; for(int i=0; i>i) cout<<1+K+i<<", "; for(int i: A) cout<<1+i<<", "; cout<<"]\n"; } void solveFor(const vector& A, ld sum) { ld need = fabsl(target - sum); int negate = sum > target ? ~0 : 0; constexpr int M = 1<= z) ++j; addRes(A, fabsl(z-res2[j].first), negate ^ res[i].second, negate ^ res2[j].second); if (j+1>j) { x += sqrs[j]; y += sqrs[j+K]; } assert(isfinite(x)); res[i] = P(x,i); res2[i] = P(y,i); } cout<<"start\n"; sort(res,res+(1< distr(0,1); vector A; A.reserve(N); while(1) { A.clear(); ld x = 0; for(int i=2*K; i