QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#93164#4053. 序列变换JHN021100 ✓291ms82060kbC++143.2kb2023-03-31 12:59:022023-03-31 12:59:03

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-31 12:59:03]
  • 评测
  • 测评结果:100
  • 用时:291ms
  • 内存:82060kb
  • [2023-03-31 12:59:02]
  • 提交

answer

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

typedef long long ll;
typedef pair<int,int> pr;

const int MAXN=4e5,INF=1e7;

inline int Read()
{
	int res;char c;
	while(1) {c=getchar();if('0'<=c && c<='9') {res=c-'0';break;}}
	while(1) {c=getchar();if('0'<=c && c<='9') res=res*10+c-'0';else break;}
	return res;
}

int n,X,Y;ll ans;
bool s[2*MAXN+5];int Code[2*MAXN+5],Tail;
int stk[MAXN+5],tp,Match[2*MAXN+5];
inline void ScanS()
{
	while(getchar()!='(');
	s[1]=1;
	for(int i=2;i<=2*n;i++) s[i]=(getchar()=='(');
}
int A[MAXN+5],B[MAXN+5];
ll pre[MAXN+5],suf[MAXN+5];//到每层的值的个数
vector<int> nxt[MAXN+5];
set<pr> Q;
int minn[MAXN+5];

void Build(int now,int L,int R)
{
	for(int i=L,j;i<=R;i=j+1)
	{
		j=Match[i];
		nxt[now].push_back(Code[i]);
		if(j-i>1) Build(Code[i],i+1,j-1);
	}
}
int depth[MAXN+5];
vector<int> buc[MAXN+5];
void CalMsg(int now)
{
	buc[depth[now]].push_back(now);
	for(int i=0;i<nxt[now].size();i++) depth[nxt[now][i]]=depth[now]+1,CalMsg(nxt[now][i]);
}

int main()
{
	//freopen("bracket3.in","r",stdin);
	//freopen("mine.txt","w",stdout);
	n=Read(),X=Read(),Y=Read();
	ScanS();
	for(int i=1;i<=n;i++) A[i]=Read();
	if(!X && !Y) return printf("0\n"),0;
	for(int i=1;i<=2*n;i++)
		if(s[i]) Code[i]=++Tail,stk[++tp]=i;
		else Match[stk[tp--]]=i;
	Build(0,1,2*n),CalMsg(0);
	if(!X)
	{
		ll sum=0;
		for(int i=1;i<n;i++)
		{
			for(int j=0;j<buc[i].size();j++) Q.insert(make_pair(A[buc[i][j]],buc[i][j])),sum+=A[buc[i][j]];
			sum-=(*--Q.end()).first,ans+=sum,Q.erase(--Q.end());
		}
		printf("%lld\n",ans);
		return 0;
	}
	if(!Y)
	{
		ll sum=0; for(int i=1;i<=n;i++) sum+=A[i];
		B[0]=1; for(int i=1;i<=n;i++) B[i]=B[i-1]-1+buc[i].size();
		//for(int i=1;i<=n;i++) printf("%d ",B[i]);printf("\n");
		//最小值*(每层个数-2)
		int Head=1;
		for(;Head<=n && B[Head]==1;Head++) sum-=A[buc[Head][0]];//前去前缀 1 
		if(Head>n) return printf("0\n"),0;//全是 1
		Tail=Head-1; while(B[Tail+1]==2) ++Tail;//[Head,Tail] 是 2 段
		if(Tail==n-1)//没有 >=3 
		{
			int maxn=0;
			for(int i=Head;i<=n;i++)
				for(int j=0;j<buc[i].size();j++)
					maxn=max(maxn,A[buc[i][j]]);
			return printf("%lld\n",sum-maxn),0;
		}
		//[Head,Tail] 中插入的数字选个出来作为给 >=3 段的数
		minn[Tail]=INF;
		int maxn=0;
		for(int i=Tail+1;i<=n-2;i++)
		{
			minn[i]=minn[i-1];
			for(int j=0;j<buc[i].size();j++) minn[i]=min(minn[i],A[buc[i][j]]),maxn=max(maxn,A[buc[i][j]]);
			pre[i]=pre[i-1]+B[i]-2;
		}
		for(int i=n-2;i>Tail;i--) suf[i]=suf[i+1]+1ll*(B[i]-2)*minn[i];
		if(Head>Tail)//没有 2 
			return printf("%lld\n",sum+suf[Head]-maxn),0;
		ans=1e18;
		for(int i=Head;i<=Tail;i++)
			for(int j=0;j<buc[i].size();j++)
			{
				int L=Tail+1,R=n-2,v=A[buc[i][j]];
				for(int mid;L<=R;)
				{
					mid=(L+R)>>1;
					if(v<=minn[mid]) L=mid+1;
					else R=mid-1;
				}
				ans=min(ans,1ll*pre[R]*v+suf[R+1]-max(maxn,v));
			}
		printf("%lld\n",sum+ans);
		return 0;
	}
	ll sum=0;int cnt=0;
	for(int i=1;i<n;i++)
	{
		for(int j=0;j<buc[i].size();j++) Q.insert(make_pair(A[buc[i][j]],buc[i][j])),sum+=A[buc[i][j]],++cnt;
		ans+=1ll*(*Q.begin()).first*(cnt-2)+sum;
		sum-=(*--Q.end()).first,--cnt,Q.erase(--Q.end());
	}
	printf("%lld\n",ans);
	return 0;
}

详细

Test #1:

score: 4
Accepted
time: 3ms
memory: 23292kb

input:

8 1 0
((((())()()))())
9885387 6516650 9760493 9641422 5202363 4238336 7747794 490028

output:

36405804

result:

ok 1 number(s): "36405804"

Test #2:

score: 4
Accepted
time: 2ms
memory: 23236kb

input:

8 1 0
((((()()())))())
9885387 9641422 7747794 9760493 5202363 6516650 4636916 4238336

output:

51894229

result:

ok 1 number(s): "51894229"

Test #3:

score: 4
Accepted
time: 2ms
memory: 24128kb

input:

8 1 1
(((()())()()))()
9885387 5202363 490028 3368691 9641422 6516650 9760493 4238336

output:

99314759

result:

ok 1 number(s): "99314759"

Test #4:

score: 4
Accepted
time: 57ms
memory: 50092kb

input:

400000 1 0
((((()(()())(())(()((((()(()(()))))))(()()(())()(())(()()((())(()))())(()(()(()(())(())()))(()((()))())((())()()()(()(()(())(()())((())((()(())))((()))(()((()())))))(()(()()((()))())(()()())(((()()))(()(())((())))((()()))(()()(()))))((())(())((())())(()()(()))))((())()(()()()(()()())))(()...

output:

398732254583021874

result:

ok 1 number(s): "398732254583021874"

Test #5:

score: 4
Accepted
time: 125ms
memory: 60724kb

input:

400000 1 1
(()(()())(())(()((((()(()(()))))))(()()(())()(())(()()((())(()))())(()(()(()(())(())()))(()((()))())((())()()()(()(()(())(()())((())((()(())))((()))(()((()())))))(()(()()((()))())(()()())(((()()))(()(())((())))((()()))(()()(()))))((())(())((())())(()()(()))))((())()(()()()(()()())))(()()(...

output:

1277445719345875816

result:

ok 1 number(s): "1277445719345875816"

Test #6:

score: 4
Accepted
time: 0ms
memory: 25328kb

input:

20 1 0
((((((((((((((((()()())))))))))))))())))
9885387 9760493 9641422 3455737 1595369 2520060 5202363 383427 5005212 7513927 4238336 7747794 4702568 490028 5180541 4636916 4089173 4897764 3368691 6516650

output:

67797073

result:

ok 1 number(s): "67797073"

Test #7:

score: 4
Accepted
time: 1ms
memory: 25352kb

input:

20 1 0
(((((((((())()((())))()(()(()))))))())))
8722863 8703136 7513927 3665124 6956430 1979803 5174068 2520060 1595369 4089173 383427 4702568 3368691 6465783 5180541 1021531 3455737 5005212 4897764 1513930

output:

76233193

result:

ok 1 number(s): "76233193"

Test #8:

score: 4
Accepted
time: 13ms
memory: 22616kb

input:

20 1 1
(((((()((())()(((()))))()(()(()))))))())
8722863 5634023 1513930 4897764 8703136 4089173 1021531 383427 4702568 3455737 5180541 6956430 6465783 5005212 7513927 1979803 3665124 5723059 1595369 5174068

output:

314768566

result:

ok 1 number(s): "314768566"

Test #9:

score: 4
Accepted
time: 117ms
memory: 66392kb

input:

350000 0 1
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

26841786325208686

result:

ok 1 number(s): "26841786325208686"

Test #10:

score: 4
Accepted
time: 138ms
memory: 75288kb

input:

400000 0 1
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

28037973526177667

result:

ok 1 number(s): "28037973526177667"

Test #11:

score: 4
Accepted
time: 291ms
memory: 64912kb

input:

400000 0 1
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

178128920485682222

result:

ok 1 number(s): "178128920485682222"

Test #12:

score: 4
Accepted
time: 61ms
memory: 82060kb

input:

400000 0 1
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

81004444

result:

ok 1 number(s): "81004444"

Test #13:

score: 4
Accepted
time: 6ms
memory: 25648kb

input:

2000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

11784741323

result:

ok 1 number(s): "11784741323"

Test #14:

score: 4
Accepted
time: 6ms
memory: 23532kb

input:

2000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

11784741323

result:

ok 1 number(s): "11784741323"

Test #15:

score: 4
Accepted
time: 4ms
memory: 23520kb

input:

2000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

2428581049

result:

ok 1 number(s): "2428581049"

Test #16:

score: 4
Accepted
time: 3ms
memory: 25472kb

input:

2000 1 1
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()(()())((())(()()()))(()()((())()(()()()(((()))))(()(()(()(())())))()((())))(()(()(())))((())(()())(()(())((()))(()(())(()))...

output:

5495819380766

result:

ok 1 number(s): "5495819380766"

Test #17:

score: 4
Accepted
time: 52ms
memory: 66732kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

19998495457

result:

ok 1 number(s): "19998495457"

Test #18:

score: 4
Accepted
time: 54ms
memory: 68316kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

19998783786

result:

ok 1 number(s): "19998783786"

Test #19:

score: 4
Accepted
time: 49ms
memory: 67960kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

19998749017

result:

ok 1 number(s): "19998749017"

Test #20:

score: 4
Accepted
time: 44ms
memory: 66844kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

19998573314

result:

ok 1 number(s): "19998573314"

Test #21:

score: 4
Accepted
time: 40ms
memory: 66440kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

19998540124

result:

ok 1 number(s): "19998540124"

Test #22:

score: 4
Accepted
time: 65ms
memory: 66348kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

1263574956069

result:

ok 1 number(s): "1263574956069"

Test #23:

score: 4
Accepted
time: 63ms
memory: 68472kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

1581722851072

result:

ok 1 number(s): "1581722851072"

Test #24:

score: 4
Accepted
time: 52ms
memory: 68064kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

1243099504352

result:

ok 1 number(s): "1243099504352"

Test #25:

score: 4
Accepted
time: 47ms
memory: 66476kb

input:

400000 1 0
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((...

output:

1140371996503

result:

ok 1 number(s): "1140371996503"

Extra Test:

score: 0
Extra Test Passed