結果
問題 | No.5020 Averaging |
ユーザー | %20 |
提出日時 | 2024-02-27 17:47:18 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 860 ms / 1,000 ms |
コード長 | 18,797 bytes |
コンパイル時間 | 3,421 ms |
コンパイル使用メモリ | 239,892 KB |
実行使用メモリ | 22,040 KB |
スコア | 92,566,226 |
最終ジャッジ日時 | 2024-02-27 17:47:49 |
合計ジャッジ時間 | 18,586 ms |
ジャッジサーバーID (参考情報) |
judge15 / judge14 |
純コード判定しない問題か言語 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 382 ms
22,040 KB |
testcase_01 | AC | 325 ms
22,040 KB |
testcase_02 | AC | 267 ms
22,040 KB |
testcase_03 | AC | 387 ms
22,040 KB |
testcase_04 | AC | 307 ms
22,040 KB |
testcase_05 | AC | 420 ms
22,040 KB |
testcase_06 | AC | 694 ms
22,040 KB |
testcase_07 | AC | 113 ms
22,040 KB |
testcase_08 | AC | 462 ms
22,040 KB |
testcase_09 | AC | 860 ms
22,040 KB |
testcase_10 | AC | 110 ms
22,040 KB |
testcase_11 | AC | 761 ms
22,040 KB |
testcase_12 | AC | 138 ms
22,040 KB |
testcase_13 | AC | 409 ms
22,040 KB |
testcase_14 | AC | 544 ms
22,040 KB |
testcase_15 | AC | 303 ms
22,040 KB |
testcase_16 | AC | 171 ms
22,040 KB |
testcase_17 | AC | 343 ms
22,040 KB |
testcase_18 | AC | 556 ms
22,040 KB |
testcase_19 | AC | 183 ms
22,040 KB |
testcase_20 | AC | 180 ms
22,040 KB |
testcase_21 | AC | 203 ms
22,040 KB |
testcase_22 | AC | 394 ms
22,040 KB |
testcase_23 | AC | 318 ms
22,040 KB |
testcase_24 | AC | 358 ms
22,040 KB |
testcase_25 | AC | 494 ms
22,040 KB |
testcase_26 | AC | 210 ms
22,040 KB |
testcase_27 | AC | 199 ms
22,040 KB |
testcase_28 | AC | 437 ms
22,040 KB |
testcase_29 | AC | 231 ms
22,040 KB |
testcase_30 | AC | 320 ms
22,040 KB |
testcase_31 | AC | 225 ms
22,040 KB |
testcase_32 | AC | 205 ms
22,040 KB |
testcase_33 | AC | 632 ms
22,040 KB |
testcase_34 | AC | 673 ms
22,040 KB |
testcase_35 | AC | 264 ms
22,040 KB |
testcase_36 | AC | 614 ms
22,040 KB |
testcase_37 | AC | 484 ms
22,040 KB |
testcase_38 | AC | 508 ms
22,040 KB |
testcase_39 | AC | 240 ms
22,040 KB |
testcase_40 | AC | 249 ms
22,040 KB |
testcase_41 | AC | 254 ms
22,040 KB |
testcase_42 | AC | 137 ms
22,040 KB |
testcase_43 | AC | 267 ms
22,040 KB |
testcase_44 | AC | 202 ms
22,040 KB |
testcase_45 | AC | 665 ms
22,040 KB |
testcase_46 | AC | 572 ms
22,040 KB |
testcase_47 | AC | 514 ms
22,040 KB |
testcase_48 | AC | 280 ms
22,040 KB |
testcase_49 | AC | 224 ms
22,040 KB |
ソースコード
#if 0 __END__ #endif #include<bits/stdc++.h> #define fr(i,n) for(int i=0;i<(n);++i) #define foor(i,a,b) for(int i=(a);i<=(b);++i) #define rf(i,n) for(int i=(n);i-->0;) #define roof(i,b,a) for(int i=(b);i>=(a);--i) #define elsif else if #define all(x) x.begin(),x.end() #define Sort(x) sort(all(x)) #define Reverse(x) reverse(all(x)) #define Rev(x) reverse(all(x)) #define Uniq(v) v.erase(unique(all(v)),v.end()) #define PQ priority_queue #define NP(x) next_permutation(all(x)) #define M_PI 3.14159265358979323846 #define popcount __builtin_popcountll using namespace std; using vb=vector<bool>;using vvb=vector<vb>; using vi=vector<int>;using vvi=vector<vi>;using vvvi=vector<vvi>; using ll=long long; using vl=vector< ll>;using vvl=vector<vl>;using vvvl=vector<vvl>; using ull=unsigned long long;using vu=vector<ull>;using vvu=vector<vu>; using dbl=double; using vd=vector<dbl>;using vvd=vector<vd>;using vvvd=vector<vvd>; using str=string; using vs=vector<str>;using vvs=vector<vs>; using pii=pair<int,int>; using vpii=vector<pii>;using mii=map<int,int>; using pll=pair< ll, ll>; using vpll=vector<pll>;using mll=map< ll, ll>; using pdd=pair<dbl,dbl>; using vpdd=vector<pdd>;using mdd=map<dbl,dbl>; using pss=pair<str,str>; using vpss=vector<pss>;using mss=map<str,str>; using pil=pair<int, ll>; using vpil=vector<pil>;using mil=map<int, ll>; using pli=pair< ll,int>; using vpli=vector<pli>;using mli=map< ll,int>; using pdi=pair<dbl,int>; using vpdi=vector<pdi>;using mdi=map<dbl,int>; template<typename T>vector<T>&operator<<(vector<T>&v,const T t){v.push_back(t);return v;} template<typename T>multiset<T>&operator<<(multiset<T>&m,const T t){m.insert(t);return m;} template<typename T>set<T>&operator<<(set<T>&s,const T t){s.insert(t);return s;} template<typename T>stack<T>&operator<<(stack<T>&s,const T t){s.push(t);return s;} template<typename T>stack<T>&operator>>(stack<T>&s,T&t){t=s.top();s.pop();return s;} template<typename T>queue<T>&operator<<(queue<T>&q,const T t){q.push(t);return q;} template<typename T>queue<T>&operator>>(queue<T>&q,T&t){t=q.front();q.pop();return q;} template<typename T,typename U>PQ<T,vector<T>,U>&operator<<(PQ<T,vector<T>,U>&q,const T t){q.push(t);return q;} template<typename T,typename U>PQ<T,vector<T>,U>&operator>>(PQ<T,vector<T>,U>&q,T&t){t=q.top();q.pop();return q;} template<typename T,typename U>istream&operator>>(istream&s,pair<T,U>&p){return s>>p.first>>p.second;} istream&operator>>(istream&s,_Bit_reference b){int a;s>>a;assert(a==0||a==1);b=a;return s;} template<typename T>istream&operator>>(istream&s,vector<T>&v){fr(i,v.size()){s>>v[i];}return s;} template<typename T,typename U>ostream&operator<<(ostream&s,const pair<T,U>p){return s<<p.first<<" "<<p.second;} template<typename T>ostream&operator<<(ostream&s,const vector<T>v){fr(i,v.size()){i?s<<" "<<v[i]:s<<v[i];}return s;} template<typename T>ostream&operator<<(ostream&s,const deque<T>d){fr(i,d.size()){i?s<<" "<<d[i]:s<<d[i];}return s;} template<typename T>_Bit_reference operator&=(_Bit_reference b,T t){return b=b&t;} template<typename T>_Bit_reference operator^=(_Bit_reference b,T t){return b=b^t;} template<typename T>_Bit_reference operator|=(_Bit_reference b,T t){return b=b|t;} template<typename T,typename U>pair<T,U>operator+(pair<T,U>a,pair<T,U>b){return {a.first+b.first,a.second+b.second};} template<typename T,typename U>pair<T,U>operator-(pair<T,U>a,pair<T,U>b){return {a.first-b.first,a.second-b.second};} template<typename T,typename U>pair<T,U>&operator+=(pair<T,U>&a,pair<T,U>b){return a=a+b;} template<typename T,typename U>pair<T,U>&operator-=(pair<T,U>&a,pair<T,U>b){return a=a-b;} void print(void){cout<<"\n";} void Print(void){cout<<endl;} template<typename T>void print(T t){cout<<t<<"\n";} template<typename T>void Print(T t){cout<<t<<endl;} template<typename T,typename...U>void print(T&&t,U&&...u){cout<<t<<" ";print(forward<U>(u)...);} template<typename T,typename...U>void Print(T&&t,U&&...u){cout<<t<<" ";Print(forward<U>(u)...);} bool YN(bool b){print(b?"YES":"NO");return b;}bool PI(bool b){print(b?"POSSIBLE":"IMPOSSIBLE");return b;} bool Yn(bool b){print(b?"Yes":"No");return b;}bool Pi(bool b){print(b?"Possible":"Impossible");return b;} bool yn(bool b){print(b?"yes":"no");return b;}bool pi(bool b){print(b?"possible":"impossible");return b;} const int e5=1e5; const int e9=1e9; const int MD=1e9+7; const int md=998244353; const ll e18=1e18; template<typename T>str to_string(const T&n){ostringstream s;s<<n;return s.str();} template<typename T>bool chmax(T&a,T b){return a<b?(a=b,true):false;} template<typename T>bool chmin(T&a,T b){return a>b?(a=b,true):false;} template<typename T,typename U>vector<pair<T,U>>dijkstra(const vector<vector<pair<T,U>>>&E,const U s,const T inf){using P=pair<T,U>;vector<P>d;fr(i,E.size()){d<<P{inf,i};}PQ<P,vector<P>,greater<P>>pq;pq<<(d[s]=P{0,s});while(pq.size()){P a=pq.top();pq.pop();U v=a.second;if(d[v].first>=a.first){for(P e:E[v]){if(d[v].first+e.first<d[e.second].first){d[e.second]=P{d[v].first+e.first,v};pq<<P{d[v].first+e.first,e.second};}}}}return d;} //template<typename T,typename U>map<U,pair<T,U>>dijkstra(map<U,vector<pair<T,U>>>E,const U s,const T inf){using P=pair<T,U>;map<U,P>d;for(pair<U,vector<P>>e:E){d[e.first]=P{inf,e.first};}PQ<P,vector<P>,greater<P>>pq;pq<<(d[s]=P{0,s});while(pq.size()){P a=pq.top();pq.pop();U v=a.second;if(d[v].first>=a.first){for(P e:E[v]){if(d[v].first+e.first<d[e.second].first){d[e.second]=P{d[v].first+e.first,v};pq<<P{d[v].first+e.first,e.second};}}}}return d;} //ll maxflow(vector<mil>&E,int s,int t){ll z=0;vi b(E.size(),-1);for(int i=0;;++i){static auto dfs=[&](int v,ll f,auto&dfs)->ll{if(v==t)return f;b[v]=i;for(auto&p:E[v]){if(b[p.first]<i&&p.second){if(ll r=dfs(p.first,min(f,p.second),dfs)){p.second-=r;E[p.first][v]+=r;return r;}}}return 0;};ll x=dfs(s,ll(1e18),dfs);z+=x;if(x==0)return z;}} template<typename T>T distsq(pair<T,T>a,pair<T,T>b){return (a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second);} template<typename T>T max(const vector<T>a){assert(a.size());T m=a[0];for(T e:a){m=max(m,e);}return m;} template<typename T>T min(const vector<T>a){assert(a.size());T m=a[0];for(T e:a){m=min(m,e);}return m;} template<typename T>T gcd(const T a,const T b){return a?gcd(b%a,a):b;} template<typename T>T gcd(const vector<T>a){T g=a[0];for(T e:a){g=gcd(g,e);}return g;} //template<typename T>vector<T>LCS(vector<T>A,vector<T>B){int N=A.size(),M=B.size();vector<vector<pair<int,pii>>>d(N+1,vector<pair<int,pii>>(M+1));fr(i,N){fr(j,M){if(A[i]==B[j]){d[i+1][j+1]={d[i][j].first+1,{i,j}};}else{d[i+1][j+1]=max(d[i][j+1],d[i+1][j]);}}}vector<T>r;for(pii p={N,M};d[p.first][p.second].first;p=d[p.first][p.second].second){r<<A[d[p.first][p.second].second.first];}Reverse(r);return r;} //str LCS(str S,str T){vector<char>s=LCS(vector<char>(S.begin(),S.end()),vector<char>(T.begin(),T.end()));return str(s.begin(),s.end());} //template<typename T>vector<pair<T,T>>ConvexHull(vector<pair<T,T>>V){if(V.size()<=3){return V;}Sort(V);rf(i,V.size()-1)V<<V[i];vector<pair<T,T>>r;for(pair<T,T>p:V){int s=r.size();while(s>=2&&(p.second-r[s-1].second)*(p.first-r[s-2].first)<(p.second-r[s-2].second)*(p.first-r[s-1].first)){r.pop_back();--s;}r<<p;}r.pop_back();return r;} class UnionFind{vi p,s;void extend(int N){foor(i,p.size(),N){p<<i;s<<1;}}public:UnionFind(void){}UnionFind(int N){extend(N-1);}int find(int i){extend(i);return p[i]=p[i]==i?i:find(p[i]);}void unite(int a,int b){extend(a);extend(b);if((a=find(a))!=(b=find(b))){if(s[a]>s[b]){swap(a,b);}s[b]+=s[a];p[a]=b;}}void unite(pii p){return unite(p.first,p.second);}bool same(int a,int b){extend(a);extend(b);return find(a)==find(b);}bool same(pii p){return same(p.first,p.second);}int size(int x){extend(x);return s[find(x)];}}; //ll MST(vector<pair<ll,pii>>&E){Sort(E);UnionFind uf;ll z=0;for(auto&e:E){if(!uf.same(e.second)){z+=e.first;uf.unite(e.second);}}return z;} //ll strmod(const str&s,const int m){ll x=0;fr(i,s.size()){x=(x*10+s[i]-48)%m;}return x;} vvl mul(const vvl&A,const vvl&B,const int m){vvl C;fr(y,A.size()){C<<vl(B[y].size());}fr(y,C.size()){fr(x,C[y].size()){fr(i,A[0].size()){(C[y][x]+=A[y][i]*B[i][x])%=m;}}}return C;} vvl pow(const vvl&A,const ll n,const int m){vvl B;fr(y,A.size()){B<<vl(A.size());}if(n==0){fr(i,B.size()){B[i][i]=1;}}elsif(n%2){B=mul(A,pow(A,n-1,m),m);}else{vvl C=pow(A,n/2,m);B=mul(C,C,m);}return B;} ll pow(const ll a,const ll n,const int m){ll t;return n?(n&1?a>=0?a%m:(m-(-a%m))%m:1)*(t=pow(a,n>>1,m),t*t%m)%m:1;} ll inv(const ll x,const int p){assert(x!=0);return pow(x,p-2,p);} //ll inv(const ll x){return inv(x,MD);} vpll fact(const int n,const int p){assert(n<p);vpll v(n+1);v[0].first=1;foor(i,1,n){v[i].first=v[i-1].first*i%p;}v[n].second=inv(v[n].first,p);roof(i,n,1){v[i-1].second=v[i].second*i%p;}return v;} class Combination{const vpll f;const int M;public:Combination(int n,int m):f(fact(n,m)),M(m){}ll P(int n,int k){return n<0||k<0||n<k?0ll:f[n].first*f[n-k].second%M;}ll C(int n,int k){return k<0||n<k?0ll:P(n,k)*f[k].second%M;}ll H(int n,int k){return n==0&&k==0?1ll:C(n+k-1,k);}ll F(int n){return n<0?0:f[n].first;}}; ll C2(const int n){return(ll)n*~-n/2;} ll sum(const vi a){ll s=0;for(int e:a){s+=e;}return s;} ll sum(const vl a){ll s=0;for(ll e:a){s+=e;}return s;} ll sum(const vb a){ll s=0;for(bool e:a){s+=e;}return s;} template<typename T>int MSB(T N){int r=-1;for(;N>0;N/=2){++r;}return r;} template<typename T>class SegmentTree{vector<T>S;T(*const op)(T a,T b);const T zero;const int B;public:SegmentTree(int N,T(*f)(T a,T b),const T zero):S(1<<MSB(N-1)+2,zero),op(f),zero(zero),B(1<<MSB(N-1)+1){}SegmentTree(vector<T>v,T(*f)(T a,T b),const T zero):SegmentTree(v.size(),f,zero){fr(i,v.size()){S[S.size()/2+i]=v[i];}roof(i,S.size()/2-1,1){S[i]=op(S[i*2],S[i*2+1]);}}T calc(int l,int r){l+=B;r+=B;if(l>r){return zero;}if(l==r){return S[l];}T L=S[l],R=S[r];for(;l/2<r/2;l/=2,r/=2){if(l%2==0){L=op(L,S[l+1]);}if(r%2==1){R=op(S[r-1],R);}}return op(L,R);}void replace(int i,T x){for(S[i+=B]=x;i!=1;i/=2){if(i%2){S[i/2]=op(S[i-1],S[i]);}else{S[i/2]=op(S[i],S[i+1]);}}}void add(int i,T x){replace(i,op(S[B+i],x));}T top(){return S[1];}T get(int i){return S[i+B];}}; //ll BITsum(vl&B,int i){ll z=0;while(i>0){z+=B[i];i-=i&-i;}return z;} //void BITadd(vl&B,int i,ll x){while(i<B.size()){B[i]+=x;i+=i&-i;}} ll fib(const ll n,const int m){ll a,b,c,d,A,B,C,D;a=1;b=0;c=0;d=1;rf(i,63){A=a*a+b*c;B=a*b+b*d;C=c*a+d*c;D=c*b+d*d;if(n>>i&1){a=A;b=B;c=C;d=D;A=a+b;B=a;C=c+d;D=c;}a=A%m;b=B%m;c=C%m;d=D%m;}return b;} vi primes(int n){vb b(n+1);vi p;foor(i,2,n){if(!b[i]){p<<i;for(int j=2*i;j<=n;j+=i){b[j]=true;}}}return p;} //vl primes(ll L,ll R){assert(0<=L);assert(L<=R);int n=sqrt(R);vb b(n+1,true),B(R-L+1,true);for(ll i=2;i<=n;++i){if(b[i]){for(ll j=i+i;j<=n;j+=i){b[j]=false;}for(ll j=R/i*i;j>=max(L,i+i);j-=i){B[j-L]=false;}}}vl P;for(ll i=max(2ll,L);i<=R;++i){if(B[i-L]){P<<i;}}return P;} vb isprime(const int n){vb v(n+1,true);v[0]=v[1]=false;foor(i,2,n){if(v[i]){for(int j=2*i;j<=n;j+=i){v[j]=false;}}}return v;} struct LCA{vvi par;vi dep;LCA(vvi&E,int root):par(MSB(E.size())+1,vi(E.size())),dep(E.size()){function<void(int,int)>dfs=[&](int i,int p){for(int j:E[i])if(j!=p){par[0][j]=i;dep[j]=dep[i]+1;dfs(j,i);}};par[0][root]=root;dfs(root,root);fr(i,par.size()-1){fr(j,par[0].size()){par[i+1][j]=par[i][par[i][j]];}}}int operator()(int a,int b){if(dep[a]>dep[b])swap(a,b);for(int t=dep[b]-dep[a],i=0;t;t>>=1,++i){if(t&1){b=par[i][b];}}if(a==b)return a;rf(i,par.size()){if(par[i][a]!=par[i][b]){a=par[i][a];b=par[i][b];}}return par[0][a];}int dist(int a,int b){return dep[a]+dep[b]-2*dep[operator()(a,b)];}}; vpli factor(ll N){vpli r;for(ll i=2;i*i<=N;++i){if(N%i==0){r<<pli{i,0};while(N%i==0){N/=i;++r.back().second;}}}if(N>1){r<<pli{N,1};}return r;} vl divisors(ll n){vl r;ll m=sqrt(n);foor(i,1,m)if(n%i==0)r<<ll(i);rf(i,r.size()-(m*m==n))r<<n/r[i];return r;} //vi SuffixArray(str S){int N=S.size();vi rank(N+1),tmp(N+1),sa(N+1);fr(i,N){sa[i]=i;rank[i]=S[i];}sa[N]=N;rank[N]=-1;int k;auto cmp=[&](int&a,int&b)->bool{if(rank[a]!=rank[b])return rank[a]<rank[b];return (a+k<=N?rank[a+k]:-1)<(b+k<=N?rank[b+k]:-1);};for(k=1;k<=N;k*=2){sort(all(sa),cmp);tmp[sa[0]]=0;foor(i,1,N){tmp[sa[i]]=tmp[sa[i-1]]+cmp(sa[i-1],sa[i]);}rank=tmp;}return sa;}; template<typename T,typename U>void sort2(vector<T>&a,vector<U>&b){int N=a.size();assert(b.size()==N);vector<pair<T,U>>v;fr(i,N){v<<pair<T,U>{a[i],b[i]};}Sort(v);fr(i,N){a[i]=v[i].first;b[i]=v[i].second;}} template<typename T,typename U,typename V>void sort3(vector<T>&a,vector<U>&b,vector<V>&c){int N=a.size();assert(b.size()==N);assert(c.size()==N);vector<pair<T,pair<U,V>>>v;fr(i,N){v.push_back({a[i],{b[i],c[i]}});}Sort(v);fr(i,N){a[i]=v[i].first;b[i]=v[i].second.first;c[i]=v[i].second.second;}} vi toposo(vvi E){int N=E.size();vi T(N,-1);{vvi R(N);vi v;{vb u(N);function<void(int)>f=[&](int i){if(u[i])return;u[i]=true;for(int j:E[i]){R[j]<<i;f(j);}v<<i;};fr(i,N){f(i);}}{int k=0;function<void(int)>f=[&](int i){T[i]=k;for(int j:R[i]){if(T[j]==-1){f(j);}}};rf(i,v.size()){if(T[v[i]]==-1){f(v[i]);++k;}}}}return T;} vb SAT2(vvi E){int N=E.size();assert(N%2==0);vi T=toposo(E);vb z(N);fr(i,N/2){if(T[2*i]==T[2*i+1]){return vb{};}z[2*i+(T[2*i]<T[2*i+1])]=true;}return z;} ll extgcd(ll a,ll b,ll&x,ll&y){if(b==0){x=1;y=0;return a;}ll d=extgcd(b,a%b,y,x);y-=a/b*x;return d;} //ll INV(ll a,ll m){ll x,y;extgcd(a,m,x,y);return (x%m+m)%m;} //ll garner(int m1,int a1,int m2,int a2){if(a1>a2){swap(a1,a2);swap(m1,m2);}return INV(m1,m2)*(a2-a1)%m2*m1+a1;} //ull mulull(ull a,ull b,ull m){using ld=long double;ll t=a*b-m*ull(ld(a)*ld(b)/ld(m));return t+m*(t<0)-m*(t>=ll(m));} //ll powll(const ll a,const ll n,const ll m){return n?n%2?mulull(a,powll(a,n-1,m),m):powll(mulull(a,a,m),n/2,m):1;} //bool MillerRabin(int n){if(n<2){return false;}int d=n-1,s=0;for(;d%2==0;d/=2){++s;}if(s==0){return n==2;}for(int a:{2,7,61})if(a<n){if(pow(a,d,n)!=1){fr(r,s){if(pow(a,d<<r,n)==n-1)break;if(r==s-1)return false;}}}return true;} //bool MillerRabin(ll n){if(n<1ll<<31){return MillerRabin(int(n));}if(n<2){return false;}ll d=n-1;int s=0;for(;d%2==0;d/=2){++s;}if(s==0){return n==2;}for(int a:{2,325,9375,28178,450775,9780504,1795265022})if(a<n){if(powll(a,d,n)!=1){fr(r,s){if(powll(a,d<<r,n)==n-1)break;if(r==s-1)return false;}}}return true;} //class Prime{vi P,mf;public:Prime(int N):mf(N+1){foor(i,2,N){if(mf[i]==0){mf[i]=i;P<<i;}for(int j=0;j<P.size()&&i*P[j]<=N&&P[j]<=mf[i];++j){mf[i*P[j]]=P[j];}}}vi list(void){return P;}bool isprime(int x){assert(x<int(mf.size()));return x>=2&&mf[x]==x;}int minfactor(int x){assert(x>=2);assert(x<int(mf.size()));return mf[x];}vpii factor(int x){assert(x>=1);assert(x<int(mf.size()));vpii v;while(x>1){if(v.empty()||v.back().first<mf[x]){v<<pii{mf[x],1};}else{++v.back().second;}x=x/mf[x];}return v;}vi divisors(int x){assert(x>=1);assert(x<int(mf.size()));vi v={1};for(pii p:factor(x)){int n=v.size();fr(i,n){int t=v[i];fr(_,p.second){t*=p.first;v<<t;}}}Sort(v);return v;}}; //int TonelliShanks(const int p,const int a){assert(0<=a&&a<p);if(p==2||a==0)return a;if(pow(a,(p-1)/2,p)!=1)return -1;if(p%4==3)return pow(a,(p+1)/4,p);random_device rand;int q=p-1,m=0;for(;q%2==0;q/=2){++m;}int z;do{z=rand()%p;}while(pow(z,(p-1)/2,p)!=p-1);int c=pow(z,q,p),t=pow(a,q,p),r=pow(a,(q+1)/2,p);for(;m>1;--m){if(pow(t,1<<m-2,p)==1){c=ll(c)*c%p;}else{r=ll(c)*r%p;c=ll(c)*c%p;t=ll(c)*t%p;}}return r;} vi BFS(vvi&E,int s){vi d(E.size(),-1);d[s]=0;queue<int>q;q<<s;while(q.size()){int i;q>>i;for(int j:E[i]){if(d[j]<0){d[j]=d[i]+1;q<<j;}}}return d;} //template<typename T>vector<T>slidemax(const vector<T>&v,int k){assert(1<=k&&k<=int(v.size()));--k;vector<T>d(v.size()-k);deque<int>q;fr(j,k){while(q.size()&&v[q.back()]<=v[j]){q.pop_back();}q.push_back(j);}fr(j,v.size()-k){while(q.size()&&v[q.back()]<=v[j+k]){q.pop_back();}q.push_back(j+k);d[j]=v[q.front()];if(q.front()==j){q.pop_front();}}return d;} const int N=45; const int M=50; const ll K=5e17; random_device rd; mt19937 mt(rd()); ll r(ll a,ll b){ return a+(mt()<<30^mt())%(b-a); } ll maa(ll a,ll b){ return max(abs(a-K),abs(b-K)); } ll calcscore(ll a,ll b){ return ll(2000000-100000*log10(maa(a,b)+1)); } #define x20 0 int main(){cin.tie(0);ios::sync_with_stdio(false); vl A(N),B(N); #if x20 ll maxscore=0; ll minscore=e18; ll totalscore=0; fr(testcase,50){ fr(i,N){ A[i]=r(1e17,e18+1); B[i]=r(1e17,e18+1); } #else { int n;cin>>n; } fr(i,N){ cin>>A[i]>>B[i]; } #endif vi z(N-1); ll a=(A[0]>>N-1)+N/2; ll b=(B[0]>>N-1)+N/2; fr(i,N-1){ z[i]=i+1; a+=A[z[i]]>>N-1-i; b+=B[z[i]]>>N-1-i; } while(max(abs(a-K),abs(b-K))>=10000){// 80 % int i=r(0,N-1); int j=r(0,N-2); if(i<=j){ ++j; } ll aa=a-(A[z[i]]>>N-1-i)-(A[z[j]]>>N-1-j)+(A[z[i]]>>N-1-j)+(A[z[j]]>>N-1-i); ll bb=b-(B[z[i]]>>N-1-i)-(B[z[j]]>>N-1-j)+(B[z[i]]>>N-1-j)+(B[z[j]]>>N-1-i); if(r(0,e9)/1e9<exp(6*(log10(maa(a,b))-log10(maa(aa,bb))))){ a=aa; b=bb; swap(z[i],z[j]); } } int L=19; vl mina(1<<L,e18),minb(1<<L,e18),maxa(1<<L),maxb(1<<L); mina[0]=minb[0]=maxa[0]=maxb[0]=0; fr(i,1<<L){ fr(j,L)if(i>>j&1^1){ int k=N-1-popcount(i); chmin(mina[1<<j|i],mina[i]+(A[z[j]]>>k)); chmin(minb[1<<j|i],minb[i]+(B[z[j]]>>k)); chmax(maxa[1<<j|i],maxa[i]+(A[z[j]]>>k)); chmax(maxb[1<<j|i],maxb[i]+(B[z[j]]>>k)); } } a=(A[0]>>N-1)+N/2; b=(B[0]>>N-1)+N/2; foor(i,L,N-2){ a+=A[z[i]]>>N-1-i; b+=B[z[i]]>>N-1-i; } vi v(L),bestv(L); fr(i,L){ bestv[i]=z[i]; } ll bestmaa=10000; vi p(1<<L); fr(i,L){ p[1<<i]=i; } function<void(int,ll,ll,int)>f=[&](int i,ll a,ll b,int c){ if(bestmaa<40){ return; } if(i<L){ if(K-bestmaa<=a+maxa[c]&&a+mina[c]<=K+bestmaa&&K-bestmaa<=b+maxb[c]&&b+minb[c]<=K+bestmaa){ for(int t=c;t;t&=t-1){ int j=p[t^(t&t-1)]; v[L-1-i]=z[j]; f(i+1,a+(A[z[j]]>>N-L+i),b+(B[z[j]]>>N-L+i),c^1<<j); if(!(K-bestmaa<=a+maxa[c]&&a+mina[c]<=K+bestmaa&&K-bestmaa<=b+maxb[c]&&b+minb[c]<=K+bestmaa)){ break; } if(bestmaa<10){ break; } } } }else{ if(chmin(bestmaa,maa(a,b))){ bestv=v; } } }; f(0,a,b,(1<<L)-1); fr(i,L){ z[i]=bestv[i]; } printf("%d\n",int(z.size())); fr(i,z.size()){ printf("1 %d\n",z[i]+1); } #if x20 fr(i,z.size()){ ll a=(A[0]+A[z[i]])/2; ll b=(B[0]+B[z[i]])/2; A[0]=A[z[i]]=a; B[0]=B[z[i]]=b; } ll score=calcscore(A[0],B[0]); printf("%.8f %lld %lld\n",score*50/1e8,A[0],B[0]); chmax(maxscore,score); chmin(minscore,score); totalscore+=score; } printf("\n"); printf("max: %.8f\n",maxscore*50/1e8); printf("ave: %.8f\n",totalscore/1e8); printf("min: %.8f\n",minscore*50/1e8); #else #endif return 0; } #if 0 #endif