NOIP2024 前集训:NOIP2024加赛 5

news/2024/11/16 8:30:25/文章来源:https://www.cnblogs.com/Charlieljk/p/18548971

前言

music
《浮光》看指尖拨响蝴蝶 扇动一场离别我推开无声岁月 续梦一页你我只是打个照面 可曾有过誓约走进熟悉却 陌生的思念啊……啊……你的眼眸 装满了时间你的身后 拥故事成篇此生如梦 愿细数流年与你同写 沧海桑田浮光掠影 重山彩云间你的伏线 穿越千百年人生不过 恍惚三万天漫漫人间 留恋流连你说那月光 照过同样城墙永恒的刹那的 此刻沉默无话想问你这星空 是否不曾变是啊 是啊 我们望着它风吹过耳旁 古远的歌唱啊这是我也是你 不曾遗忘的啊是来路是去处 是你在回答去吧 去啊 总会相遇吧你的眼眸 装满了时间你的身后 拥故事成篇此生如梦 愿细数流年与你同写 沧海桑田浮光掠影 重山彩云间你的伏线 穿越千百年人生不过 恍惚三万天漫漫人间 留恋流连

先写点闲话。

明天(发的时候已经是今天了)就要放假了开心O(∩_∩)O~~,就放一天不开心 ̄へ ̄。

还要开家长会?不知道我们这种期中没考选科也毫无悬念的过来开家长会的意义何在……

明天还有模拟赛?到底打不打?真打的话打一半就得走。

晚上(21:10 左右)网没了?feifei 说出故障了,过了一会儿修复了。

宿舍的远古电话交换机太破了老是占线烦死了。

中午让我推歌,好耶放周深的,想要放《一期一会》,huge 说要放大家可能听过的跟着唱,不是都没听过《未闻花名》吗?改成《浮光》,还要我跟着唱,不是我耳朵有毛病不会跟着唱,深深唱得那么好听静静欣赏不好么,要么只听要么自己唱,好像机房听过这个的也不多(就算听过也唱不上去),一帮人默默地听没人唱。

好了该说比赛了,就是挂的快比得的分多了,T1 只筛到 \(m\) 被 hack 哩(全机房都被 hack 了),T2 部分分给了足足 \(80\),那我还想个屁正解直接写部分分,没开 long long 挂 \(30\)?!?T4 我会部分分!没打完……

T1 题面一开始还是错的,所以先打的 T2,T2 飞快拿到 \(80\) 后去写 T1,发现二分显然就开打,然后读假题了,我甚至在那儿怀疑大样例是错的都没有怀疑自己读假题了,瞪了 \(2\) 个多小时发现读假题了,发现加个埃筛就过了。

T2 出线段树分治板子,记得上次出珂朵莉维护颜色段板子也是部分分给了足足 \(80\)

huge 坦白是往年学长加的 hack,还科普了为什么饮水机会漏。

image

T1 暴力操作

显然可以二分答案。

因为 \(\lfloor\dfrac{a}{bc}\rfloor=\lfloor\dfrac{\lfloor\frac{a}{b}\rfloor}{b}\rfloor\),对于一个 \((a_i,x)\) 所满足 \(\lfloor\dfrac{a_i}{x}\rfloor\le mid,x<y\) 一定满足 \(\lfloor\dfrac{a_i}{y}\rfloor\le mid\),所以先对于 \(c_i\) 做一次后缀 \(\min\),再跑一边埃筛(类似背包吧):\(\forall j\mid i,c_{i}=\min(c_i,c_j\times c_{\frac{i}{j}})\),之后再做一次后缀 \(\min\),使每次操作代价最小。

这里需要注意一个细节,不能只筛到 \(m\),如 \(n=7\),则 \(7\) 可以通过 \(3\times 3\) 替换掉,但此时他是 \(9\),所以 \(9\) 也要筛到,保险起见筛到 \(2m\)

对于 check,先将 \(a\) 按升序排序,对于一个数是中位数的必要条件是 \(\sum\limits_{i=1}^n[a_i\le x]\ge \lfloor\dfrac{n}{2}\rfloor+1\),若满足就往左二分即可,满足该条件的最小的一个一定是中位数,对于 \(n\) 为奇数显然正确,对于 \(n\) 为偶数,考虑中位数等于 \(\dfrac{a_{\frac{n}{2}}+a_{\frac{n}{2}+1}}{2}\),现在显然有 \(a_{\frac{n}{2}}\le mid\),若能够使 \(a_{\frac{n}{2}+1}< mid\) 则此时中位数是 \(<mid\) 的,答案还能再小,直到最小的一个满足的。

具体如何找到一个 \(x\) 满足 \(\lfloor\dfrac{a_i}{x}\rfloor\le mid\),有 \(\dfrac{a_i}{x}<mid+1\),则 \(x>\dfrac{a_i}{mid+1}\),即 \(x\ge \lfloor\dfrac{a_i}{mid+1}\rfloor+1\),也可以双指针跑,D 一下部分人二分找 \(x\) 的双 \(\log\) 做法。

复杂度 \((n+m)\log m\)

点击查看代码
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=5e5+10;
template<typename Tp> inline void read(Tp&x)
{x=0;register bool z=true;register char c=getchar_unlocked();for(;!isdigit(c);c=getchar_unlocked()) if(c=='-') z=0;for(;isdigit(c);c=getchar_unlocked()) x=(x<<1)+(x<<3)+(c^48);x=(z?x:~x+1);
}
template<typename T,typename ...Tp> inline void read(T &x,Tp &...y){read(x);read(y...);}
template<typename Tp> inline void wt(Tp x){if(x>9)wt(x/10);putchar_unlocked((x%10)+'0');}
template<typename Tp> inline void write(Tp x){if(x<0)putchar_unlocked('-'),x=~x+1;wt(x);}
template<typename T,typename ...Tp> inline void write(T x,Tp ...y){write(x);putchar_unlocked(' ');write(y...);}
int n,m,k,ans,a[N],b[N<<1];
inline bool check(int x)
{int pos=upper_bound(a+1,a+1+n,x)-a-1,res=0;if(pos>(n>>1)) return 1;for(int i=pos+1;i<=(n>>1)+1;i++) (res+=b[a[i]/(x+1)+1])>k&&(i=n);return res<=k;
}
signed main()
{freopen("opt.in","r",stdin),freopen("opt.out","w",stdout);read(n,m,k);for(int i=1;i<=n;i++) read(a[i]); sort(a+1,a+1+n);for(int i=1;i<=m;i++) read(b[i]); fill(b+m+1,b+2*m+1,1e9+1);for(int i=m-1;i;i--) b[i]=min(b[i],b[i+1]);for(int i=1;i<=2*m;i++) for(int j=2*i;j<=2*m;j+=i) b[j]=min(b[j],b[i]+b[j/i]);for(int i=2*m-1;i;i--) b[i]=min(b[i],b[i+1]);for(int l=0,r=m,mid;l<=r;) check(mid=l+r>>1)?r=(ans=mid)-1:l=mid+1;write(ans);
}

T2 异或连通

  • P5787 二分图 /【模板】线段树分治。

发现每个 \(w_i\) 能够存在对应的区间不超过 \(\log k\) 段,这个是能够用 01trie 求出来的。

之后就是线段树分治板子了,就是在线段树上跑 dfs 加回溯,用可撤销并查集维护。

点击查看代码
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define sort stable_sort
#define mid (l+r>>1)
#define ls (mid<<1)
#define rs (mid<<1|1)
using namespace std;
const int N=1e5+10;
template<typename Tp> inline void read(Tp&x)
{x=0;register bool z=true;register char c=getchar_unlocked();for(;!isdigit(c);c=getchar_unlocked()) if(c=='-') z=0;for(;isdigit(c);c=getchar_unlocked()) x=(x<<1)+(x<<3)+(c^48);x=(z?x:~x+1);
}
template<typename T,typename ...Tp> inline void read(T &x,Tp &...y){read(x);read(y...);}
template<typename Tp> inline void wt(Tp x){if(x>9)wt(x/10);putchar_unlocked((x%10)+'0');}
template<typename Tp> inline void write(Tp x){if(x<0)putchar_unlocked('-'),x=~x+1;wt(x);}
template<typename T,typename ...Tp> inline void write(T x,Tp ...y){write(x);putchar_unlocked(' ');write(y...);}
int n,m,q,k,top,res,tot=1,u[N],v[N],w[N],a[N],b[N],f[N],fa[N],sz[N],sta[N],ans[N],l[N<<5],r[N<<5],son[N<<5][2];
vector<int>g[N],t[N<<1]; unordered_map<int,int>mp;
inline int find(int x) {while(x!=fa[x]) x=fa[x]; return x;}
inline void merge(int x,int y)
{sz[x]>sz[y]&&(x^=y^=x^=y),fa[sta[++top]=x]=y,res-=f[y],res-=f[x];res+=(f[y]+=1ll*sz[x]*sz[y]+f[x]),sz[y]+=sz[x];
}
inline void undo(int ltop,int lres)
{for(int x,y;top>ltop;top--,f[y]-=1ll*sz[x]*sz[y]+f[x])x=sta[top],y=fa[sta[top]],sz[y]-=sz[x],fa[x]=x; res=lres;
}
inline void add(int p,int l,int r,int vl,int vr,int x)
{if(vl==0) return ; if(vl<=l&&vr>=r) return t[p].push_back(x),void(0);if(vl<=mid) add(ls,l,mid,vl,vr,x); if(vr>mid) add(rs,mid+1,r,vl,vr,x);
}
inline void ask(int p,int l,int r)
{int ltop=top,x,y,lres=res;for(int i:t[p]) if((x=find(u[i]))!=(y=find(v[i]))) merge(x,y);if(l==r) {for(int i:g[l]) ans[i]=res; return undo(ltop,lres),void();}ask(ls,l,mid),ask(rs,mid+1,r),undo(ltop,lres);
}
inline void insert(int x,int id)
{for(int i=30,p=1,c;~i;i--,r[p=son[p][c]]=id)if(!son[p][c=(x>>i)&1]) l[son[p][c]=++tot]=id;
}
inline void ask(int id)
{for(int i=30,p=1,c,d,j;~i&&p;i--){j=son[p][c=(w[id]>>i)&1],d=(k>>i)&1;if(d) add(1,1,b[0],l[j],r[j],id),p=son[p][c^1]; else p=j;}
}
signed main()
{freopen("xor.in","r",stdin),freopen("xor.out","w",stdout);read(n,m,q,k); for(int i=1;i<=n;i++) fa[i]=i,sz[i]=1;for(int i=1;i<=m;i++) read(u[i],v[i],w[i]);for(int i=1;i<=q;i++) read(a[i]),b[i]=a[i];sort(b+1,b+1+q),b[0]=unique(b+1,b+1+q)-b-1;for(int i=1;i<=b[0];i++) insert(b[i],mp[b[i]]=i);for(int i=1;i<=q;i++) g[mp[a[i]]].push_back(i);for(int i=1;i<=m;i++) ask(i); ask(1,1,b[0]);for(int i=1;i<=q;i++) write(ans[i]),puts("");
}

T3 诡异键盘

没有太大改的欲望,留最后改吧。

T4 民主投票

还没有改,有空马上改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834450.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读数据质量管理:数据可靠性与数据质量问题解决之道05数据标准化

数据标准化1. 批处理 1.1. 批处理在一段时间内收集数据,然后将大量数据“批处理”在离散的数据包中 1.2. 直到20世纪10年代中期,批处理都是处理分析型数据最常用的方法 1.3. 批处理比流处理要便宜得多,即使是对时间要求最苛刻的处理需求也足以满足 1.4. 批处理是经过时间考验…

基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform

前言 今天大姚给大家分享一个基于C#开源、功能强大、灵活的跨平台开发框架:Uno Platform。通过 Uno Platform,开发者可以利用单一代码库实现多平台兼容,极大地提高了开发效率和代码复用性。项目介绍 Uno Platform是一个基于C#开源、功能强大、灵活的跨平台开发框架,用于快速…

chrony配置/释义

[root@c7-1 ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core)[root@c7-1 ~]# yum -y install chrony [root@c7-1 ~]# vim /etc/chrony.conf # 自带 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp…

WPF 打开资源管理器且选中某个文件

本文将和大家介绍如何在 Windows 系统上使用 SHOpenFolderAndSelectItems 方法打开资源管理器且选中给定的文件打开资源管理器且选中某个文件可以使用 cmd 调用 explorer 带上 select 参数,如下面命令行所示 explorer.exe /select,"C:\Folder\file.txt"但有很多情况…

Virtual Box 虚拟机扩容

Virtual Box 虚拟机扩容 扩容有风险,有可能导致磁盘损坏,系统不可用。 需要使用的工具 gparted GParted -- A free application for graphically managing disk device partitions 步骤图解 1.扩大虚拟硬盘的容量2.加载分区工具执行分区操作3.扩展逻辑卷 要扩大 / 分区的空间…

RealCustom:缩小真实文本词的范围,实现实时开放域文本到图像的定制

RealCustom:缩小真实文本词的范围,实现实时开放域文本到图像的定制文本到图像定制旨在为给定的主题合成文本驱动的图像,最近彻底改变了内容创作。现有的作品遵循伪词范式,即将给定的主题表示为伪词,然后将其与给定的文本组合在一起。然而,伪词与给定文本固有的纠缠扩散范…

网站f12代码怎么修改,掌握网站F12调试工具的使用技巧

打开F12开发者工具:在浏览器中打开您需要调试的网页,按下F12键或右键点击页面任意位置选择“检查”(Inspect),即可打开开发者工具。选择Elements面板:在开发者工具顶部的选项卡中,选择“Elements”面板。这里显示了当前页面的HTML结构。查找目标元素:使用鼠标悬停在页面…

织梦手机网站模板修改,如何在织梦CMS中修改手机网站模板

织梦CMS(DedeCMS)支持手机网站模板的自定义,通过以下步骤可以轻松修改手机网站模板:登录后台:打开浏览器,输入织梦CMS的后台地址,使用管理员账号登录。进入模板管理:在后台左侧菜单栏中选择“模板” -> “默认模板管理”。 选择“手机模板”选项卡,查看当前使用的手…

网站开源代码修改,如何在本地开发环境中修改网站开源代码

修改网站开源代码可以定制网站的功能和设计。以下是修改网站开源代码的步骤:克隆代码仓库:使用Git或其他版本控制工具克隆网站的开源代码仓库。 例如:git clone https://github.com/username/repository.git cd repository安装依赖:根据项目文档安装所需的依赖库。 例如,使…

Codeforces Round 985 div2 个人题解(A~E)

Codeforces Round 985 div2 个人题解(A~E) Dashboard - Codeforces Round 987 (Div. 2) - Codeforces 火车头 #include <bits/stdc++.h>using namespace std;#define ft first #define sd second#define yes cout << "yes\n" #define no cout << &…

CTF/9/pwnerTool,一个适用于CTF中自动对Pwn题目文件进行信息收集,并且生成基础做题py文件的Pwn工具

CTF中自动对Pwn题目文件进行信息收集,并且生成基础做题py文件的Pwn工具,适用于Ubuntu 随手写的,写的不好请轻喷. 一个用于ctf对Pwn题目文件进行信息收集,打包了检查文件类型、检查类型保护、新建py文件、寻找传参工具的过程。 同时可以修补题目给出的动态库和libc文件保证本…

Spacedrive :一款开源超高颜值功能强大的跨平台文件管理器

我们的文件越来越来越多,大量的文件分布在网盘,硬盘里面。即使电脑硬盘里面,也是分布在不同的地方,管理起来越来非常麻烦。 要是能够有一个软件,可以将网盘,硬盘和网络驱动器统一起来管理,将会是多么的方便。 今天就给大家推荐一个高颜值的文件管理软件——spacedrive,…