社区讨论
谁能帮孩子卡卡常
学术版参与者 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 条回复,欢迎继续交流。
正在加载回复...