社区讨论

谁能帮孩子卡卡常

学术版参与者 8已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@mm2sltbp
此快照首次捕获于
2026/02/26 09:36
2 周前
此快照最后确认于
2026/02/27 14:40
2 周前
查看原帖
写出这么一坨常数起飞的石山,我这辈子有了
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+9;
int n,a[N],b[N],c[N],m,cnt;
inline int read(){char c;int f=1,res=0;c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){res=(res<<1)+(res<<3)+(c^48);c=getchar();}return res*f;}
struct node{
    int i,j,k;
    bool operator<(const node&x)const{
        return a[i]*b[j]+b[j]*c[k]+c[k]*a[i]<a[x.i]*b[x.j]+b[x.j]*c[x.k]+c[x.k]*a[x.i];
    }
};
priority_queue<node>q1,q2;
int val(node x){return a[x.i]*b[x.j]+b[x.j]*c[x.k]+c[x.k]*a[x.i];}
bool cmp(const int&x,const int&y){
    return x>y;
}
int g(int x,int y,int z){return x*2058434+y*4987093+z*3324284;}
unordered_map<int,bool>mp;
signed main(){
	freopen("sb.in","r",stdin);
	freopen("sb.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)a[i]=read();
    for(int i=1;i<=n;i++)b[i]=read();
    for(int i=1;i<=n;i++)c[i]=read();
    sort(a+1,a+n+1,cmp);
    sort(b+1,b+n+1,cmp);
    sort(c+1,c+n+1,cmp);
    q1.push({1,1,1});
    q2.push({1,1,1});
    while(!q1.empty()){
        node _=q1.top();
        int i=_.i,j=_.j,k=_.k;
        q1.pop();
        cnt++;
        if(i<n&&!mp[g(i+1,j,k)])q1.push({i+1,j,k}),q2.push({i+1,j,k}),mp[g(i+1,j,k)]=true;
        if(j<n&&!mp[g(i,j+1,k)])q1.push({i,j+1,k}),q2.push({i,j+1,k}),mp[g(i,j+1,k)]=true;
        if(k<n&&!mp[g(i,j,k+1)])q1.push({i,j,k+1}),q2.push({i,j,k+1}),mp[g(i,j,k+1)]=true;
        if(cnt>=max(n,m))break;
    }
    for(int i=1;i<m;i++)q2.pop();
    cout<<val(q2.top())<<endl;
    exit(0);
}

回复

14 条回复,欢迎继续交流。

正在加载回复...