ABC127
ABC127 D#
题目大意:
给定数字,有次顺序操作,每次可以将最多张牌变成,求次操作后卡牌上最大总点数和的情况
题解:
挺新奇的思路,将张牌和张牌全部丢进去,取最大的张牌出来
不用实际丢进去,只要一个归并排序的合并方法就可以
ABC127 E#
题目大意:
在的棋盘中选择个点,一种方法的贡献是个点中两两曼哈顿距离之和,求所有方案的贡献和
题解:
对于一种选择方案,贡献是:
显然我没发现可以分开讨论,我们以讨论的贡献为例
一种好出的想法是枚举两个点的坐标造成的贡献,然后其他点任意选择
这样复杂度无法接受,但是其实只要枚举就可以了,设
ABC127 F#
题目大意:
有一个函数,初始时
有两种操作:
第一种:
第二种:求令最小的和的最小值
题解:
每个的独立计算的,只要求使得最小
等价于动态求中位数
学到了一种看上去很牛逼的对顶堆写法,超短
#include<bits/stdc++.h>
using namespace std;
namespace red{
#define int long long
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define mid ((l+r)>>1)
#define eps (1e-12)
inline int read()
{
int x=0;char ch,f=0;
for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar());
if(ch=='-') f=1,ch=getchar();
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return f?-x:x;
}
const int N=5e5+10,mod=1e9+7;
int n,sum;
priority_queue<int,vector<int>,greater<int> > q2;
priority_queue<int> q1;
inline void main()
{
n=read();
for(int opt,x,y,i=1;i<=n;++i)
{
opt=read();
if(opt==1)
{
x=read(),y=read();
sum+=y;
q1.push(x);q2.push(x);
int l=q1.top();q1.pop();
int r=q2.top();q2.pop();
if(l>r){sum+=l-r;swap(l,r);}
q1.push(l);q2.push(r);
}
else
{
printf("%lld %lld\n",q1.top(),sum);
}
}
}
}
signed main()
{
red::main();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】