90分求助
查看原帖
90分求助
699852
bzzltl楼主2023/5/14 21:34

rt

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e6+6;
const int M=1e3+7;
const int IM=2147483647;
const long long LLM=922337203685475807;

inline int read()
{
	int x=0,y=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-') y=-y;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+(c^'0');c=getchar();}
	return x*y;
}

int n,m,s,cnt,tot,ans;
int a[N],b[N];
bool vis[N];
vector<int>r0,r1;

signed main()
{
	int T=read();
	while(T--)
	{
		n=read();
		int l0=0,l1=0;
		ans=LLM;
		r0.clear();
		r1.clear();
		for(int i=1;i<=n;i++) a[i]=read();
		for(int i=1;i<=n;i++)
		{
			b[i]=read();
			if(!b[i])
			{
				if(!l0) l0=i,r0.push_back(i);
				else r0.push_back(i),vis[i]=false;
				
			}
			else
			{
				if(!l1) l1=i,r1.push_back(i);
				else r1.push_back(i),vis[i]=true;
			}
		}
		if(!l0||!l1) printf("%lld\n",a[1]+a[n]);
		else if(l0==1)
		{
			if(r0[r0.size()-1]==n) printf("%lld\n",a[1]+a[n]);
			else
			{
				for(int i=0;i<r0.size();i++)
				{
					int R=r0[i];
					if(vis[R+1]==true) ans=min(ans,a[1]+a[R]+a[R+1]+a[n]);
				}
				printf("%lld\n",ans);
			}
		}
		else
		{
			if(r1[r1.size()-1]==n) printf("%lld\n",a[1]+a[n]);
			else
			{
				for(int i=0;i<r1.size();i++)
				{
					int R=r1[i];
					if(vis[R+1]==false) ans=min(ans,a[1]+a[R]+a[R+1]+a[n]);
				}
				printf("%lld\n",ans);
			}
		}
	}
	return 0;
}
2023/5/14 21:34
加载中...