// CP01 bench: your one-pass countPairsWithSum against the brute force, on growing inputs.// Build and run with .\run.ps1 -Bench (after step 9 passes). Do not edit this file.// Predict the timing table in your notebook BEFORE you run it (CP01, lab step 10).#include<chrono>#include<cstdio>#include<random>#include<vector>#include"drills.h"// Every pair checked: about n * n / 2 additions.staticlonglongbruteForcePairs(conststd::vector<int>&v,inttarget){longlongcount=0;for(std::size_ti=0;i<v.size();++i)for(std::size_tj=i+1;j<v.size();++j)if(static_cast<longlong>(v[i])+v[j]==target)++count;returncount;}template<classF>staticdoublesecondsFor(Fwork){autostart=std::chrono::steady_clock::now();work();returnstd::chrono::duration<double>(std::chrono::steady_clock::now()-start).count();}intmain(){std::mt19937rng(2026);std::uniform_int_distribution<int>pick(-1000,1000);std::printf("%8s %14s %14s %10s %s\n","n","brute (ms)","one pass (ms)","ratio","answers agree");for(intn:{1000,4000,16000,64000}){std::vector<int>v(n);for(int&x:v)x=pick(rng);longlonga=0,b=0;doubletb=secondsFor([&]{a=bruteForcePairs(v,7);});doubletf=secondsFor([&]{b=countPairsWithSum(v,7);});std::printf("%8d %14.2f %14.2f %10.0f %s\n",n,tb*1e3,tf*1e3,tb/(tf>0?tf:1e-9),a==b?"yes":"NO");}return0;}