比赛 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;
}