QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#93164 | #4053. 序列变换 | JHN021 | 100 ✓ | 291ms | 82060kb | C++14 | 3.2kb | 2023-03-31 12:59:02 | 2023-03-31 12:59:03 |
Judging History
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