QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#26845#2571. Aidana and PitaIrisuAC ✓1134ms91324kbC++143.3kb2022-04-08 18:59:522022-04-29 04:40:22

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-04-29 04:40:22]
  • 评测
  • 测评结果:AC
  • 用时:1134ms
  • 内存:91324kb
  • [2022-04-08 18:59:52]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;

#define rep(i,a,b) for(int i=(a),i##end=(b);i<=i##end;++i)
#define per(i,a,b) for(int i=(a),i##end=(b);i>=i##end;--i)
mt19937 Rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
template<typename T>void chkmax(T&x,T y){if(x<y)x=y;}
template<typename T>void chkmin(T&x,T y){if(x>y)x=y;}

#define pb push_back
#define ALL(x) (x).begin(),(x).end()
#define mem(x) memset((x),0,sizeof(x))

typedef double db;
typedef long long ll;
typedef vector<int>vi;
typedef pair<int,int>pii;

typedef unsigned u32;
typedef unsigned uint;
typedef unsigned long long u64;

namespace orzjk{
  const int SZ=1e6;
  char buf[SZ],*p1=buf,*p2=buf;
  char nc(){
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,SZ,stdin),p1==p2)?EOF:*p1++;
  }
  char fub[SZ],*p3=fub,*p4=fub+SZ;
  void pc(char c){
    p3==p4&&(fwrite(fub,1,SZ,stdout),p3=fub);
    *p3++=c;
  }
  void flush(){
    fwrite(fub,1,p3-fub,stdout),p3=fub;
  }
}
using orzjk::nc;
using orzjk::pc;

//#define nc getchar
//#define pc putchar

int read(){
  int x=0,f=1;char c=nc();
  while(c<48)c=='-'&&(f=-1),c=nc();
  while(c>47)x=x*10+(c^48),c=nc();
  return x*f;
}
void write(int x){
  static char st[21];
  if(!x)return pc(48),void();
  char*p=st;
  if(x<0)x=-x,pc('-');
  for(;x;x/=10)*p++=x%10|48;
  do{
    pc(*--p);
  }while(p!=st);
}

//const int P=1e9+7;
const int P=998244353;
int qp(int a,int k){
  int res=1;for(;k;k>>=1,a=1ll*a*a%P)if(k&1)res=1ll*res*a%P;return res;
}

const int maxn=2.2e6+10;
int n,k,arr[25],val[25];

int vsz,dat[maxn];

int tot;
struct node{
  int a,b,c,S,op,v1,v2;
}A[maxn];

pii c[maxn];
void add(int pos,pii x){
  for(;pos<=vsz;pos+=pos&-pos)chkmin(c[pos],x);
}
pii query(int pos){
  pii res(1e9,0);for(;pos;pos&=pos-1)chkmin(res,c[pos]);return res;
}

int pw3[15];
void dfs(int now,node o){
  if(now==k){
    if(o.op==0){
      o.v1=o.a-o.b;
      o.v2=o.b-o.c;
    }else{
      o.v1=o.b-o.a;
      o.v2=o.c-o.b;
    }
    A[++tot]=o;
    dat[tot]=o.v2;
    return;
  }
  node t;
  t=o,t.a+=val[now],t.S+=0*pw3[now],dfs(now+1,t);
  t=o,t.b+=val[now],t.S+=1*pw3[now],dfs(now+1,t);
  t=o,t.c+=val[now],t.S+=2*pw3[now],dfs(now+1,t);
}

void print(int len,int S){
  rep(_,1,len){
    printf("%d ",S%3+1);
    S/=3;
  }
}

void solve(){
  cin>>n;
  rep(i,0,n-1)cin>>arr[i];
  pw3[0]=1;rep(i,1,13)pw3[i]=3*pw3[i-1];
  k=n/2;
  rep(i,0,k-1)val[i]=arr[i];
  dfs(0,node{0,0,0,0,0,0,0});
  k=n-n/2;
  rep(i,0,k-1)val[i]=arr[i+n/2];
  dfs(0,node{0,0,0,0,1,0,0});
  sort(dat+1,dat+tot+1);
  vsz=unique(dat+1,dat+tot+1)-dat-1;
  sort(A+1,A+tot+1,[](node P,node Q){
    return P.v1<Q.v1||(P.v1==Q.v1&&P.op<Q.op);
  });
  memset(c,0x3f,sizeof c);
  int ans=INT_MAX,S0=-1,S1=-1;
  rep(i,1,tot){
    auto e=A[i];
    e.v2=lower_bound(dat+1,dat+vsz+1,e.v2)-dat;
//    printf("%d %d %d %d %d %d %d\n",e.a,e.b,e.c,e.S,e.op,e.v1,e.v2);
    if(!e.op){
      add(e.v2,{e.c-e.a,e.S});
    }else{
      pii p=query(e.v2);
      int v=p.first+e.c-e.a;
      if(ans>v){
        ans=v,S0=p.second,S1=e.S;
      }
    }
  }
//  cout<<ans<<endl;
  print(n/2,S0);
  print(n-n/2,S1);
}

signed main(){
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);
//  int T;cin>>T;while(T--)solve();
  solve();
  orzjk::flush();
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 25808kb

input:

5
2 3 1 4 2

output:

3 2 2 1 3 

result:

ok answer is 0

Test #2:

score: 0
Accepted
time: 2ms
memory: 26056kb

input:

6
3 2 5 3 4 2

output:

2 3 3 2 1 1 

result:

ok answer is 1

Test #3:

score: 0
Accepted
time: 3ms
memory: 25960kb

input:

3
2617460 3290620 1468912

output:

2 3 1 

result:

ok answer is 1821708

Test #4:

score: 0
Accepted
time: 288ms
memory: 88972kb

input:

25
6 6 7 8 5 10 5 7 10 10 4 4 5 8 1 6 3 1 9 4 10 7 8 4 5

output:

3 2 3 3 2 3 2 2 2 2 2 2 3 1 3 1 3 1 1 3 1 3 1 1 1 

result:

ok answer is 0

Test #5:

score: 0
Accepted
time: 286ms
memory: 91324kb

input:

25
8 2 2 9 9 10 3 5 9 1 2 5 8 1 4 8 4 3 6 2 8 8 4 2 2

output:

2 3 3 3 2 3 2 2 2 2 2 2 1 3 1 1 1 1 1 3 1 3 3 3 3 

result:

ok answer is 1

Test #6:

score: 0
Accepted
time: 348ms
memory: 91280kb

input:

25
9999996 9999999 9999991 9999991 9999999 9999997 9999991 9999993 9999992 10000000 9999991 10000000 9999996 9999997 9999993 9999992 9999990 9999991 9999997 10000000 9999998 9999990 9999993 9999990 9999999

output:

2 2 3 3 2 1 3 2 2 2 3 2 2 1 1 3 3 3 1 1 1 3 1 3 1 

result:

ok answer is 9999943

Test #7:

score: 0
Accepted
time: 213ms
memory: 89276kb

input:

25
10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000

output:

3 3 3 3 2 2 2 2 2 2 2 2 1 1 3 1 1 3 1 1 3 3 1 1 3 

result:

ok answer is 10000000

Test #8:

score: 0
Accepted
time: 1084ms
memory: 91312kb

input:

25
4568194 6252832 2990361 6179671 5525735 3402540 12193 4812907 2393092 9823299 4089880 1724585 2200631 5143163 5750864 5341161 5957736 2310544 8033121 9675751 9295231 71902 6463783 7667395 5613033

output:

3 1 1 1 1 1 2 2 2 3 3 1 1 2 1 3 3 3 2 3 2 1 2 1 2 

result:

ok answer is 49

Test #9:

score: 0
Accepted
time: 1102ms
memory: 89276kb

input:

25
7762025 9149481 7523209 4813111 6800820 1960599 4807700 5411348 4528299 7599785 3468951 537831 6539799 2655771 1259341 9722159 506693 2973008 7910966 3611985 6228870 4141646 9112851 1735188 6538160

output:

1 3 2 1 3 1 1 2 1 1 2 2 1 1 1 3 1 3 3 2 2 3 2 3 2 

result:

ok answer is 145

Test #10:

score: 0
Accepted
time: 1082ms
memory: 89272kb

input:

25
4732744 6239034 6860504 9029957 848680 209411 3629865 1309532 7860007 2831327 1707125 320774 4082248 4458046 8318819 7279399 861428 5020696 716989 8764261 952311 9612131 5994738 7283372 5509248

output:

1 1 1 3 1 1 1 2 2 1 2 2 2 3 3 2 3 2 3 3 2 2 3 1 1 

result:

ok answer is 53

Test #11:

score: 0
Accepted
time: 1046ms
memory: 89232kb

input:

25
3926971 5832018 518527 8763702 973269 4552634 6533999 2808656 1277522 5063756 3389181 9876771 4222160 9001717 3592108 5852492 7874646 507942 8922016 4798000 1131210 9081684 512549 3399413 3253241

output:

1 2 2 3 1 2 1 2 2 3 2 3 2 1 1 2 1 2 3 3 3 2 2 1 1 

result:

ok answer is 91

Test #12:

score: 0
Accepted
time: 1121ms
memory: 89268kb

input:

25
9383440 7906533 1692080 1331860 34750 3968473 2920448 8420499 271149 5986045 9894611 508079 1328124 2344042 9426700 8381332 7038317 4146561 5946221 3554163 215270 6084580 2549278 2162818 3791345

output:

3 2 3 1 1 1 1 3 1 2 3 2 1 1 1 2 3 2 2 2 1 1 1 1 1 

result:

ok answer is 110

Test #13:

score: 0
Accepted
time: 1134ms
memory: 89232kb

input:

25
4046088 7315708 7288467 1966990 9827334 4635838 8767858 753173 7611802 8291513 4297560 3224050 8917952 5408746 3999749 761012 1332251 409871 2394270 1464938 7524338 2072107 3597866 4231339 9638829

output:

2 1 2 2 3 3 2 3 3 1 1 2 1 3 2 3 3 2 2 1 3 3 2 2 1 

result:

ok answer is 101

Test #14:

score: 0
Accepted
time: 1120ms
memory: 91172kb

input:

25
5547618 2099625 1573205 2912509 2335015 318412 5812834 9389294 7275632 2026666 7297673 3627332 1756646 7605338 5450938 6407663 678114 5237576 4788058 1293302 5458419 9269556 9795138 6180722 2919003

output:

1 2 1 1 2 2 1 3 2 1 3 1 1 1 3 3 3 1 2 2 2 2 3 2 1 

result:

ok answer is 93

Test #15:

score: 0
Accepted
time: 1118ms
memory: 89184kb

input:

25
58653 5582060 2162966 9667782 5952067 1573434 692941 6120542 1083586 5478323 762427 4922098 3516225 9558027 2481388 1525866 1640140 5470075 6840333 8007024 520149 1766849 496240 7801716 7498415

output:

2 3 2 2 1 3 1 3 1 1 1 1 2 2 3 2 3 2 1 3 3 2 1 3 1 

result:

ok answer is 23

Test #16:

score: 0
Accepted
time: 407ms
memory: 91256kb

input:

25
911 78 35 7 73 7 74 57 40 54 71 15 78 931 29 51 12 953 47 18 44 51 27 62 16

output:

2 3 2 2 2 2 2 3 3 2 2 2 1 1 3 1 3 3 1 3 3 1 1 1 3 

result:

ok answer is 0

Test #17:

score: 0
Accepted
time: 814ms
memory: 89236kb

input:

25
56582 31593 65868 9990302 89743 29492 69983 10894 37205 19856 32444 9930060 97648 56666 17128 53655 30899 48933 58260 51304 83008 96129 1061 11962 9941936

output:

3 2 1 2 2 2 3 1 2 1 1 1 1 3 3 3 2 3 3 1 2 1 3 2 3 

result:

ok answer is 1

Test #18:

score: 0
Accepted
time: 493ms
memory: 89316kb

input:

25
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 6257913

output:

1 1 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 3 1 

result:

ok answer is 1065348

Test #19:

score: 0
Accepted
time: 794ms
memory: 89132kb

input:

25
1 3 9 27 81 243 729 2187 6561 19683 59049 177147 531441 1594323 4782969 1088916 1520954 9015711 5552512 1853562 2760187 8617948 6012543 456601 6151460

output:

1 1 1 1 1 1 2 1 2 2 1 3 2 1 3 2 1 3 1 1 3 2 2 2 1 

result:

ok answer is 1603

Test #20:

score: 0
Accepted
time: 420ms
memory: 89320kb

input:

25
1 10 100 1000 10000 100000 1000000 10000000 69 45 74 74 33 29 35 55 1 43 50 86 10 81 29 96 73

output:

1 1 1 1 1 1 2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

result:

ok answer is 9888006

Test #21:

score: 0
Accepted
time: 239ms
memory: 91280kb

input:

25
1 15 225 3375 50625 759375 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

output:

1 1 1 1 2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

result:

ok answer is 755740

Test #22:

score: 0
Accepted
time: 239ms
memory: 89276kb

input:

25
1 20 400 8000 160000 3200000 1 1 1 1 1 1 1 2 1 2 1 2 1 2 2 2 2 2 2

output:

1 1 1 1 2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

result:

ok answer is 3191551

Test #23:

score: 0
Accepted
time: 1057ms
memory: 89284kb

input:

25
63353 736041 846599 1431744 1739144 2274384 2726277 3192576 3288972 3897012 4065841 4471346 4818261 5270407 5717802 6224939 6449270 6970979 7252374 7847142 8218821 8775107 8869918 9324673 9686751

output:

2 1 3 3 3 1 1 2 3 2 2 1 3 2 1 3 1 3 2 3 3 2 2 1 1 

result:

ok answer is 57