P9344 去年天气旧亭台
注意,所有的
对于第一档分,
对于第二档分,可以考虑一个
时间是
接下来看正解:
分两类讨论。
-
c_1=c_n
对于这种情况的话,直接选择
所以我们有结论,对于
-
c_1 !=c_n
首先有的一个结论是,必然会存在至少一个
考虑采用反证法证明,如果不存在的话,
所以我们可以找到至少一组
时间为
#include<bits/stdc++.h>
using namespace std;
const int N =5e6+10;
#define int long long
int a[N],c[N];
signed main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>c[i];
if(c[1]==c[n])
{
cout<<a[1]+a[n]<<endl;
continue;
}
int ans=LONG_LONG_MAX;
for(int i=1;i<n;i++)
if(c[i]==c[1]&&c[i+1]==c[n])
ans=min(ans,a[i]+a[1]+a[n]+a[i+1]);
cout<<ans<<endl;
}
return 0;
}