NOIP2024模拟11:忠于自我
NOIP2024模拟11:忠于自我
T1
- 一句话题意:有若干个容量为 \(L\) 的包,从左往右装物品,当前包还能装则装,否则必须重开一个包装进去,对于\(\forall i \in [1,n]\), 问想要以此装入第 \(i \sim n\) 个物品需要开多少个包?
- 结论题:倒着装和正着装所需要的包数是一样的.
- 感性理解:在"正着装"的基础上把物品尽量往后面的包里放,就变成了"倒着装"的情况,相当于全是内部流动,总包数不变.
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
#define int long long
using ll = long long;
using namespace std;
const int N=2e5+5;
const ll inf=1e18;
int n,L;
int a[N],ans[N];
signed main(){
//freopen("pack.in","r",stdin);
//freopen("pack.out","w",stdout);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>L; F(i,1,n) cin>>a[i];
int sum=0; ans[n+1]=1;
G(i,n,1){
ans[i]=ans[i+1];
if(sum+a[i]>L) ++ans[i],sum=0;
sum+=a[i];
}
F(i,1,n) cout<<ans[i]<<" ";
return 0;
}
T2
- 给定一个元素 \(n\) 和一个可重集 \(B\), 每次从 \(B\) 中选一个数 \(x\), 将 \(n\) 变成 \(\lfloor \frac{n}{x} \rfloor\), 问可以将 \(n\) 变成多少个不同的数
- 开个\(set\)或者 \(unorderedmap\),一个一个元素地暴力试除即可,显然这样的复杂度是 log级别的(想到这个log很关键).假设 \(B\) 刚好包含前\(10\)个质数,答案的最大值为 \(458123\).
- 设答案大小为 \(A\), 则时间复杂度不超过为 \(O(A \times \sum log_x^A)\).
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
#define int long long
using ll = long long;
using namespace std;
const ll inf=1e18;
set<int> s,t;
int a[100];
int n,m,ans=0,cnt=0;
signed main(){
freopen("set.in","r",stdin);
freopen("set.out","w",stdout);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>m;
s.emplace(n);
F(i,1,m){
cin>>a[i];
cnt=0;
for(auto x:s){
t.clear(); int y=x;
while(y/=a[i]){
if(s.count(y)) break;
t.emplace(y);
}
for(auto v:t) s.emplace(v);
}
}
cout<<s.size()+1;
return 0;
}
T3
对于每个 \(i\), 预 处理 \(1 \sim i-1\) 的 \(max,cmax\) 和 \(i+1 \sim n\) 的 \(min,cmin\) 所在的位置.
- 每轮boruvka都需要重新求,是动态的
- 注意要保证最大值和次大值对应的集合不是同一个
Boruvka求最小生成树
- 用每个点可以连出的最小边更新Best
- \((pre_i, i)\)
- \((i,suf_i)\)
- \(dis(u,v)\)求任意两点距离
- Merge
- 用每个点可以连出的最小边更新Best
数组梳理:
fa[i]
best[i]:集合i的最佳边的终点,每轮都重置
val[i]:集合i的最佳边的权值,每轮都重置
cmin[i],cmax[i]
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
#define int long long
using ll = long long;
using namespace std;
const int N=1e6+5;
const ll inf=1e18;
int n;
int x[N],pre[N][2],suf[N][2],fa[N],best[N],val[N];
int get(int x){
return (fa[x]!=x) ? fa[x]=get(fa[x]) : fa[x];
}
void update(int *A,int i,const auto &cmp){
if(!i) return ;
int fA0=get(A[0]),
fA1=get(A[1]),
fi=get(i);
assert(A[0] == 0 || A[1] == 0 || fA0 != fA1);
if(A[0]==0 || cmp(x[A[0]],x[i])){
if(fA0==fi){
A[0]=i;
}
else{
A[1]=A[0];
A[0]=i;
}
}
else if(A[1]==0|| cmp(x[A[1]],x[i])){
if(fA0!=fi){
A[1]=i;
}
}
}
void update_max(int *A,int i){
update(A,i,less<int>());
}
void update_min(int *A,int i){
update(A,i,greater<int>());
}
int ask(int *A,int i){
if(get(A[0])!=get(i))
return A[0];
return A[1];
}
int dis(int p,int q){
if(p>q) swap(p,q);
return x[q]-x[p];
}
int solve(){
cin>>n; F(i,1,n) cin>>x[i],fa[i]=i;
int update=n-1,sum=0;
while(update){
// cout<<update<<"\n";
F(i,0,n+1) pre[i][0]=pre[i][1]=suf[i][0]=suf[i][1]=0;
F(i,1,n){
if(i!=1){
update_max(pre[i],pre[i-1][0]);
update_max(pre[i],pre[i-1][1]);
}
update_max(pre[i],i);
}
G(i,n,1){
if(i!=n){
update_min(suf[i],suf[i+1][0]);
update_min(suf[i],suf[i+1][1]);
}
update_min(suf[i],i);
}
F(i,1,n) best[i]=0,val[i]=2e9 + 50;
F(i,1,n){
int premax=ask(pre[i],i),pv=dis(premax,i);
int sufmin=ask(suf[i],i),sv=dis(sufmin,i);
int o=get(i);
if(premax && pv<val[o]) best[o]=premax,val[o]=pv;
if(sufmin && sv<val[o]) best[o]=sufmin,val[o]=sv;
}
F(i,1,n){
if(i==get(i) && get(i) != get(best[i])){
update--;
sum+=val[i];
fa[get(i)]=get(best[i]);
}
}
}
return sum;
}
signed main(){
freopen("mst.in","r",stdin);
freopen("mst.out","w",stdout);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cout<<solve();
return 0;
}
NOIP2024模拟11:忠于自我的更多相关文章
- JZOJ 3509. 【NOIP2013模拟11.5B组】倒霉的小C
3509. [NOIP2013模拟11.5B组]倒霉的小C(beats) (File IO): input:beats.in output:beats.out Time Limits: 1000 ms ...
- JZOJ 3508. 【NOIP2013模拟11.5B组】好元素
3508. [NOIP2013模拟11.5B组]好元素(good) (File IO): input:good.in output:good.out Time Limits: 2000 ms Mem ...
- 8.1 NOIP模拟11
8.1 NOIP模拟 11 今天上午返校之后,颓了一会,然后下午就开始考试,中午睡着了,然后刚开始考试的时候就困的一匹,我一看T1,woc,这不是之前线段树专题的题啊,和那道题差不多,所以我..... ...
- JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...
- JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)
3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...
- JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)
3526. [NOIP2013模拟11.7A组]不等式(solve) (File IO): input:solve.in output:solve.out Time Limits: 1000 ms M ...
- JZOJ 4298. 【NOIP2015模拟11.2晚】我的天
4298. [NOIP2015模拟11.2晚]我的天 (File IO): input:ohmygod.in output:ohmygod.out Time Limits: 1000 ms Memor ...
- JZOJ 3929. 【NOIP2014模拟11.6】创世纪
3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...
- JZOJ 3928. 【NOIP2014模拟11.6】射击
3928. [NOIP2014模拟11.6]射击 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 有问题, ...
- JZOJ 3927. 【NOIP2014模拟11.6】可见点数
3927. [NOIP2014模拟11.6]可见点数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description ZP ...
随机推荐
- BOM 相关知识总结
一:介绍BOM 1 1.什么是BOM? 2 DOM就是一套操作HTML标签的API(接口/方法/属性) 3 BOM就是一套操作浏览器的API(接口/方法/属性) 4 5 2.BOM中常见的对象 6 w ...
- 什么是状态机?用C语言实现进程5状态模型
前言 状态机在实际工作开发中应用非常广泛,在刚进入公司的时候,根据公司产品做流程图的时候,发现自己经常会漏了这样或那样的状态,导致整体流程会有问题,后来知道了状态机这样的东西,发现用这幅图就可以很清晰 ...
- B 端产品未来几年的发展趋势
在当今数字化高速发展的时代,B 端产品经理作为企业数字化转型的关键推动者,肩负着重大的责任.不仅要深入了解企业的业务需求,还要紧跟技术发展的步伐,为企业提供高效.创新的解决方案.那么,未来几年,B 端 ...
- 程序员失业日记4:半个月拿下4个offer
上篇文章很多小伙伴留言也讲到自己被公司裁员,还有的细心的小伙伴说去年九月就被裁了,在看一下文章的发布时间,绷不住了.先和大家说一下,我已经找到工作,因为最近工作一直都很忙,加上自己也比较懒,所以就拖了 ...
- SQL Server使用脚本实现自动备份
因服务器安装的SQL Server版本不支持自动定时备份,需自行实现,大概思路为: 创建备份数据库的脚本 创建批处理脚本执行步骤一中的脚本 创建Windows定时任务执行步骤二中的脚本 1. 创建SQ ...
- 走进Docker的世界--(库存学习笔记)
第一天 走进Docker的世界 介绍docker的前世今生,了解docker的实现原理,以Django项目为例,带大家如何编写最佳的Dockerfile构建镜像.通过本章的学习,大家会知道docker ...
- 关于.NET在中国为什么工资低的分析
引言 近年来,随着软件开发行业的蓬勃发展,越来越多的编程语言和框架进入了市场,成为了不同类型软件开发项目的首选工具.然而,在中国的开发者社区中,.NET 开发人员的工资水平相比其他技术栈,如 Java ...
- UC_Center整合单点登录后远程注册不激活问题的解决办法
修改:bbs目录\uc_server\model\user.php 下方法add_user 如下: function add_user($username, $password, $email, $u ...
- InfoTS: 具有信息感知增强的时间序列对比学习《Time Series Contrastive Learning with Information-Aware Augmentations》(对比学习、信息感知增强、高保真、多样性、信息论-信息瓶颈、元学习器)(没看懂,还需要再回顾)
现在是2024年5月23日,14:30,开始看论文. 论文:Time Series Contrastive Learning with Information-Aware Augmentations ...
- ASP.NET Core Library – HtmlSanitizer
介绍 要输出 Raw HTML 最好是先消毒一下. 使用 Library 就可以了. 参考 Github – mganss / HtmlSanitizer 安装 nuget dotnet add pa ...