AGC033D Complexity
Ex - Bow Meow Optimization
当
一只猫
那么对于
所以当
当
设
证明:
考虑极端情况,序列呈
的分布情况,其中 表示 , 都集中在两端, 全部靠近 ,此时的代价为 接下来,只需要证明,对于同一半内的相邻位置互换后,代价不变,大致分类讨论一下即可证得
因为
所以当
若
然后对所有
向左放
复杂度
#include<bits/stdc++.h>
#define ll long long
#define plb pair<ll,bool>
#define fi first
#define se second
using namespace std;
const int N=305;
int n,m,cnt,l0,l1,r0,r1;
ll a[N],b[N],suma,sumb,ans;
plb c[N<<1];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) scanf("%lld",&a[i]),suma+=a[i];
for(int i=1;i<=m;++i) scanf("%lld",&b[i]),sumb+=b[i];
sort(a+1,a+n+1),sort(b+1,b+m+1);
if(n&1) ans+=sumb; if(m&1) ans+=suma;
for(int i=1;i<=(n>>1)<<1;++i) c[++cnt]={a[i]<<1,0};
for(int i=1;i<=(m>>1)<<1;++i) c[++cnt]={b[i]<<1,1};
sort(c+1,c+cnt+1),reverse(c+1,c+cnt+1);
for(int i=1;i<=cnt;++i){
if(c[i].se){
if(r1<m>>1) ++r1,ans+=c[i].fi*r0;
else ++l1,ans+=c[i].fi*l0;
}else{
if(l0<n>>1) ++l0,ans+=c[i].fi*l1;
else ++r0,ans+=c[i].fi*r1;
}
}
printf("%lld\n",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现