比赛 |
EYOI暨SBOI暑假快乐赛3rd |
评测结果 |
AAWWWWAAAAWWWWWWWWWW |
题目名称 |
最小环(民间数据) |
最终得分 |
30 |
用户昵称 |
00000 |
运行时间 |
2.284 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2022-06-27 11:46:36 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[200005],l[200005],aa[200005],f[200005],b[200005],p=0;
void bd()
{
for(int q=1;q<=m;q++)
{
ll y=0;
for(int w=1;w<=n;w++)
{
if(w-b[q]<1)
{
y=y+f[w]*f[w+b[q]]+f[w]*f[n+(w-b[q])];
// cout<<f[w]<<" "<<w<<endl;
}else
{
if(w+b[q]>n)
{
y=y+f[w]*f[w+b[q]-n]+f[w]*f[w-b[q]];
}else
{
y=y+f[w]*f[w+b[q]]+f[w]*f[w-b[q]];
}
}
}
// cout<<" rth"<<endl;
// for(int e=1;e<=n;e++) cout<<f[e]<<endl;
// cout<<"y:"<<y<<endl;
// cout<<y<<endl;
l[q]=max(l[q],y);
y=0;
}
}
void cd(int x)
{
if(x==n+1)
{
bd();
}
for(int q=1;q<=n;q++)
{
if(aa[q]==0)
{
f[x]=a[q];aa[q]=1;
cd(x+1);
aa[q]=0;
}
}
}
void k()
{
sort(a+1,a+n+1);
p=p+a[n]*a[n-1]+a[n]*a[n-2];
for(int q=n-1;q>=3;q--)
{
p=p+a[q]*a[q-2];
}
p=p+a[2]*a[1];
}
int main(){
freopen("noi_online2020_ring.in","r",stdin);
freopen("noi_online2020_ring.out","w",stdout);
cin>>n>>m;
for(int q=1;q<=n;q++) cin>>a[q];
for(int q=1;q<=m;q++) cin>>b[q];
if(n>10)
{
k();
for(int q=1;q<=m;q++)
{
cout<<p<<endl;
}
}else
{
cd(1);
for(int q=1;q<=m;q++) cout<<l[q]/2<<endl;
}
return 0;
}