Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34436 baka24 【S】T1 C++ 通过 100 175 MS 32492 KB 1102 2024-11-07 20:11:16

Tests(10/10):


#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while('0'<=c&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=1000010,inf=100000000000000000; int n,ans,a[MAXN],b[MAXN],r[MAXN],t[MAXN]; char c[MAXN]; void dfs(int now,int sum){ if(ans<sum)return; if(now==n+1){ for(int i=1;i<=n;i++)if(a[i])return; ans=sum; return; } dfs(now+1,sum); for(int i=now;i<=r[now];i++)a[i]^=1; dfs(now+1,sum+t[now]); for(int i=now;i<=r[now];i++)a[i]^=1; } void slv(){ n=read(); scanf("%s",c+1); for(int i=1;i<=n;i++)a[i]=c[i]-'0'; for(int i=1;i<=n;i++)r[i]=read(); for(int i=1;i<=n;i++)t[i]=read(); if(n<=20){ ans=inf; dfs(1,0); } else{ int now=0; for(int i=1;i<=n;i++){ now^=b[i]; a[i]^=now; if(a[i])ans+=t[i],b[r[i]+1]^=1,now^=1; } } printf("%lld",ans); } signed main(){ slv(); return 0; }


测评信息: