結果
問題 | No.5020 Averaging |
ユーザー | askr58 |
提出日時 | 2024-02-25 16:40:26 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 928 ms / 1,000 ms |
コード長 | 3,691 bytes |
コンパイル時間 | 4,201 ms |
コンパイル使用メモリ | 284,988 KB |
実行使用メモリ | 59,948 KB |
スコア | 23,437,806 |
最終ジャッジ日時 | 2024-02-25 16:41:39 |
合計ジャッジ時間 | 52,831 ms |
ジャッジサーバーID (参考情報) |
judge12 / judge14 |
純コード判定しない問題か言語 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 908 ms
59,948 KB |
testcase_01 | AC | 903 ms
59,948 KB |
testcase_02 | AC | 880 ms
59,948 KB |
testcase_03 | AC | 906 ms
59,948 KB |
testcase_04 | AC | 908 ms
59,948 KB |
testcase_05 | AC | 906 ms
59,948 KB |
testcase_06 | AC | 886 ms
59,948 KB |
testcase_07 | AC | 905 ms
59,948 KB |
testcase_08 | AC | 905 ms
59,948 KB |
testcase_09 | AC | 882 ms
59,948 KB |
testcase_10 | AC | 910 ms
59,948 KB |
testcase_11 | AC | 910 ms
59,948 KB |
testcase_12 | AC | 903 ms
59,948 KB |
testcase_13 | AC | 884 ms
59,948 KB |
testcase_14 | AC | 906 ms
59,948 KB |
testcase_15 | AC | 921 ms
59,948 KB |
testcase_16 | AC | 900 ms
59,948 KB |
testcase_17 | AC | 878 ms
59,948 KB |
testcase_18 | AC | 904 ms
59,948 KB |
testcase_19 | AC | 904 ms
59,948 KB |
testcase_20 | AC | 886 ms
59,948 KB |
testcase_21 | AC | 896 ms
59,948 KB |
testcase_22 | AC | 910 ms
59,948 KB |
testcase_23 | AC | 915 ms
59,948 KB |
testcase_24 | AC | 906 ms
59,948 KB |
testcase_25 | AC | 899 ms
59,948 KB |
testcase_26 | AC | 884 ms
59,948 KB |
testcase_27 | AC | 896 ms
59,948 KB |
testcase_28 | AC | 906 ms
59,948 KB |
testcase_29 | AC | 905 ms
59,948 KB |
testcase_30 | AC | 887 ms
59,948 KB |
testcase_31 | AC | 928 ms
59,948 KB |
testcase_32 | AC | 880 ms
59,948 KB |
testcase_33 | AC | 920 ms
59,948 KB |
testcase_34 | AC | 878 ms
59,948 KB |
testcase_35 | AC | 893 ms
59,948 KB |
testcase_36 | AC | 906 ms
59,948 KB |
testcase_37 | AC | 887 ms
59,948 KB |
testcase_38 | AC | 899 ms
59,948 KB |
testcase_39 | AC | 928 ms
59,948 KB |
testcase_40 | AC | 909 ms
59,948 KB |
testcase_41 | AC | 880 ms
59,948 KB |
testcase_42 | AC | 909 ms
59,948 KB |
testcase_43 | AC | 916 ms
59,948 KB |
testcase_44 | AC | 890 ms
59,948 KB |
testcase_45 | AC | 873 ms
59,948 KB |
testcase_46 | AC | 882 ms
59,948 KB |
testcase_47 | AC | 912 ms
59,948 KB |
testcase_48 | AC | 857 ms
59,948 KB |
testcase_49 | AC | 910 ms
59,948 KB |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll=long long; struct card{ ll a,b; card(){} card(ll a,ll b):a(a),b(b){} void print(){ cout<<a<<" "<<b<<endl; } }; bool operator<(card x,card y){ if(x.a==y.a)return x.b<y.b; else return x.a<y.a; } card operator+(card x,card y){ return card((x.a+y.a)/2,(x.b+y.b)/2); } const int m=6; const vector<int> v={45,16,12,9,7,5,1}; const ll x=500000000000000000; int n; struct state{ vector<int> chosenindex; double score; vector<card> c; vector<pair<int,int>> operations; void calc_score(){ score=0; double s=0; for(int i:chosenindex)score+=max(abs(c[i].a-x),abs(c[i].b-x)); score/=chosenindex.size(); for(int i:chosenindex)s+=(max(abs(c[i].a-x),abs(c[i].b-x))-score)*(max(abs(c[i].a-x),abs(c[i].b-x))-score); s/=chosenindex.size(); //score+=s/100000; } state generate(vector<int>& indexes){ state res; res.chosenindex.resize(indexes.size()); res.operations=operations; res.c=c; int t=0; for(int i:indexes){ res.chosenindex[t]=chosenindex[i]; t++; } for(int p:res.chosenindex){ card t=res.c[p]+res.c[(p+1)%n]; int index=(p+1)%n; for(int j=2;j<n;j++){ card tt=res.c[p]+res.c[(p+j)%n]; if(max(abs(t.a-x),abs(t.b-x))>max(abs(tt.a-x),abs(tt.b-x))){ index=(p+j)%n; t=tt; } } res.c[p]=t; res.c[index]=t; res.operations.push_back(make_pair(p+1,index+1)); } res.calc_score(); return res; } }; bool operator<(state p,state q){ return p.score<q.score; } ll solver(int n,vector<card> c){ auto f=[&](int p){ card t=c[p]+c[(p+1)%n]; int index=(p+1)%n; for(int j=2;j<n;j++){ card tt=c[p]+c[(p+j)%n]; if(max(abs(t.a-x),abs(t.b-x))>max(abs(tt.a-x),abs(tt.b-x))){ index=(p+j)%n; t=tt; } } c[p]=t; c[index]=t; cout<<p+1; cout<<" "; cout<<index+1<<endl; }; for(int i=0;i<m;i++){ for(int j=0;j<v[i];j++){ f(j); } } return max(abs(c[0].a-x),abs(c[0].b-x)); } int main(){ cin>>n; vector<card> c(n); random_device seed; mt19937 rnd(seed()); for(int i=0;i<n;i++){ ll a,b; cin>>a>>b; c[i]=card(a,b); } cout<<50<<endl; //const int bc=100; const vector<int> bc={1,250,200,100,50,30,1}; vector<state> beam(1); state c0; c0.c=c; c0.chosenindex.resize(n); for(int i=0;i<n;i++)c0.chosenindex[i]=i; beam[0]=c0; for(int i=0;i<m;i++){ vector<state> new_beam(bc[i]*bc[i+1]); for(int j=0;j<bc[i+1];j++){ set<int> indexes; vector<int> vv(v[i+1]); indexes.insert(0); for(int k=0;k+1<v[i+1];k++){ int t=rnd()%v[i+1]; while(indexes.count(t))t=rnd()%v[i]; indexes.insert(t); vv[k]=t; } vv[v[i+1]-1]=0; for(int k=0;k<bc[i];k++){ new_beam[k*bc[i+1]+j]=beam[k].generate(vv); } } sort(new_beam.begin(),new_beam.end()); new_beam.resize(bc[i+1]); beam=new_beam; } for(int i=0;i<50;i++){ cout<<beam[0].operations[i].first; cout<<" "; cout<<beam[0].operations[i].second; cout<<endl; } cout<<beam[0].score<<endl; }