QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#20545#2571. Aidana and PitaAppleblue17#AC ✓1101ms161312kbC++142.3kb2022-02-16 15:37:062022-05-03 10:28:37

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-05-03 10:28:37]
  • 评测
  • 测评结果:AC
  • 用时:1101ms
  • 内存:161312kb
  • [2022-02-16 15:37:06]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=4e6+5,INF=1e9;

int n,a[N];
long long pw[N];

struct abc{
	int x,y;
	long long pos;
	int val,num;
	abc(int X=0,int Y=0,long long Z=0,int W=INF){
		x=X,y=Y,pos=Z,val=W;
	}
};
bool operator <(abc X,abc Y){
	return X.x<Y.x;
}
void getmin(abc &X,abc Y){
	if(Y.val<X.val) X=Y;
}
vector <abc> P,Q;

void dfs1(int dep,int ed,int x,int y,int z,long long s){
	if(dep>ed){
		P.push_back((abc){y-x,z-y,s,z-x});
//		cout<<"P: "<<y-x<<" "<<z-y<<" "<<z-x<<endl;
		return ;
	}
	dfs1(dep+1,ed,x+a[dep],y,z,s);
	dfs1(dep+1,ed,x,y+a[dep],z,s+pw[dep]);
	dfs1(dep+1,ed,x,y,z+a[dep],s+2*pw[dep]);
}

void dfs2(int dep,int ed,int x,int y,int z,long long s){
	if(dep>ed){
		Q.push_back((abc){x-y,y-z,s,z-x});
//		cout<<"Q: "<<x-y<<" "<<y-z<<" "<<z-x<<endl;
		return ;
	}
	dfs2(dep+1,ed,x+a[dep],y,z,s);
	dfs2(dep+1,ed,x,y+a[dep],z,s+pw[dep]);
	dfs2(dep+1,ed,x,y,z+a[dep],s+2*pw[dep]);
}

abc c[N]; 
int lowbit(int x){
	return x & (-x);
}
void modify(int x,abc k){
	while(x<N) getmin(c[x],k),x+=lowbit(x);
}
abc query(int x){
	abc tot;
	while(x) getmin(tot,c[x]),x-=lowbit(x);
	return tot;
}

int v[N];

int main(){
	pw[0]=1;
	for(int i=1;i<=30;i++) pw[i]=pw[i-1]*3;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	int m=n/2;
	dfs1(1,m,0,0,0,0);
	dfs2(m+1,n,0,0,0,0);
	
	sort(P.begin(),P.end());
	sort(Q.begin(),Q.end());
	
	int id=0;
	for(int i=0;i<P.size();i++) v[++id]=P[i].y;
	for(int i=0;i<Q.size();i++) v[++id]=Q[i].y;
	sort(v+1,v+id+1);
	int siz=unique(v+1,v+id+1)-v-1;
	for(int i=0;i<P.size();i++) P[i].num=lower_bound(v+1,v+siz+1,P[i].y)-v;
	for(int i=0;i<Q.size();i++) Q[i].num=lower_bound(v+1,v+siz+1,Q[i].y)-v;
	
	abc ans;
	int p=-1;
	for(int i=0;i<(int)P.size();i++){
		while(p+1<Q.size() && Q[p+1].x<=P[i].x) p++,modify(Q[p].num,Q[p]);
		
		abc tot=query(P[i].num);
		getmin(ans,(abc){0,0,P[i].pos+tot.pos,P[i].val+tot.val});
	}
	
//	for(int x=-B;x<=B;x++){
//		for(int y=-B;y<=x;y++){
//			for(int i=0;i<(int)P[x $].size();i++){
//				for(int j=0;j<(int)Q[y $].size();j++){
//					if(P[x $][i].x>=Q[y $][j].x)
//						getmin(ans,(abc){0,P[x $][i].pos+Q[y $][j].pos,P[x $][i].val+Q[y $][j].val});
//				}
//			}
//		}
//	}
	
	for(int i=1;i<=n;i++) cout<<ans.pos/pw[i]%3+1<<" ";
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 99728kb

input:

5
2 3 1 4 2

output:

3 1 1 2 3 

result:

ok answer is 0

Test #2:

score: 0
Accepted
time: 11ms
memory: 99996kb

input:

6
3 2 5 3 4 2

output:

1 3 3 1 2 2 

result:

ok answer is 1

Test #3:

score: 0
Accepted
time: 12ms
memory: 99872kb

input:

3
2617460 3290620 1468912

output:

2 3 1 

result:

ok answer is 1821708

Test #4:

score: 0
Accepted
time: 378ms
memory: 161240kb

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:

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

result:

ok answer is 0

Test #5:

score: 0
Accepted
time: 381ms
memory: 161164kb

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:

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

result:

ok answer is 1

Test #6:

score: 0
Accepted
time: 442ms
memory: 159196kb

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:

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

result:

ok answer is 9999943

Test #7:

score: 0
Accepted
time: 323ms
memory: 161312kb

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 1 3 1 1 1 3 1 3 1 1 1 2 2 3 2 2 2 3 2 2 3 2 3 3 

result:

ok answer is 10000000

Test #8:

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

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: 1101ms
memory: 159112kb

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: 1088ms
memory: 161176kb

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: 1050ms
memory: 161240kb

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: 1088ms
memory: 161244kb

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: 1086ms
memory: 161160kb

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: 1065ms
memory: 161244kb

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: 1099ms
memory: 161260kb

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: 472ms
memory: 159204kb

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:

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

result:

ok answer is 0

Test #17:

score: 0
Accepted
time: 893ms
memory: 159160kb

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:

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

result:

ok answer is 1

Test #18:

score: 0
Accepted
time: 527ms
memory: 159060kb

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:

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

result:

ok answer is 1065348

Test #19:

score: 0
Accepted
time: 810ms
memory: 159264kb

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: 510ms
memory: 161112kb

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: 330ms
memory: 161248kb

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: 337ms
memory: 159020kb

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: 1059ms
memory: 161220kb

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