首页 > 其他分享 >NOIP2024 前集训:多校A层冲刺NOIP2024模拟赛20

NOIP2024 前集训:多校A层冲刺NOIP2024模拟赛20

时间:2024-11-13 11:46:16浏览次数:1  
标签:20 rs int void 多校 read ls inline NOIP2024

前言

image

考古了,现在才写。

已经忘了赛时历程了,就记得 T1 打了个错误率高达 \(\dfrac{1}{100000}\) 的乱搞做法(前后各连 \(\log\) 个 \(k\) 大值)然后被卡常了,后三道都没交不记得为啥了。

T1 星际联邦

std 是 \(O(m\log m)\) 的菠萝算法,但是被众人疯狂爆标。

正解是 \(O(n)\) 的,不考虑连通性的话每个点连前缀最大值或后缀最小值是最优的,考虑连通性,他只能去连接第一个大于他的位置以后的后缀最小值,其实就是先分组,再组间连边,正确性是保证的。

点击查看代码
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=3e5+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,a[N],f[N],e[N],mn[N]; ll ans;
inline int find(int x) {return x==f[x]?x:f[x]=find(f[x]);}
signed main()
{
	freopen("star.in","r",stdin),freopen("star.out","w",stdout);
	read(n),a[0]=-1e9; for(int i=1,x=0;i<=n;i++)
		read(a[i]),f[i]=i,a[x]<a[i]?e[++m]=x=i:f[find(i)]=x;
	mn[n+1]=1e9; for(int i=n;i;i--) mn[i]=min(mn[i+1],a[i]);
	for(int i=1,x;i<=n;i++) if(i!=(x=find(i))) ans+=min(a[i]-a[x],mn[i+1]-a[i]);
	for(int i=1;i<m;i++) ans+=mn[e[i+1]]-a[e[i]]; write(ans);
}

T2 和平精英

首先需要知道一些性质:

  • \(x\&y\le \min(x,y),x|y\ge \max(x,y)\)。
  • \(popcount(x\&y)\le \min(popcount(x),popcount(y)),popcount(x|y)\ge \max(popcount(x),popcount(y))\)。

针对第一个性质我们有了 \(O(q(n+v))\) 的枚举答案的做法,这是扯淡的,半分都没有。

针对第二个性质我们有了 \(O(q(n+\log v))\) 的做法,这已经是一个优秀的暴力了。

即对于每个枚举的 \(p\),若 \(popcount(a_i)<p\) 则扔到 \(\{或\}\) 里,若 \(popcount(a_i)>p\) 则扔到 \(\{与\}\) 里,否则对于 \(\{a_i\mid popcount(a_i)=p\}\) 的,发现他们应该全部相等,然后再丢到哪个里面就无所谓了,两边可以抵消掉。

然后发现只要加个线段树就可以通过此题,每个 \(ppcount\) 开一颗线段树,维护区间或、与以及数的个数即可,复杂度 \(O(n\log n\log v)\)。

点击查看代码
#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,a[N];
struct aa
{
	int oor,aand=(1<<30)-1,cnt;
	inline aa operator + (const aa a) const
	{return (aa){oor|a.oor,aand&a.aand,cnt+a.cnt};}
};
class segment_tree
{
	private:
		aa t[N<<1];
		inline int count(int x,int res=0)
		{for(int i=0;i<=30;i++) res+=(x>>i)&1; return res;}
	public:
		inline void build(int p,int l,int r,int d)
		{
			if(l==r)
			{
				if(count(a[l])==d) t[p].cnt=1,t[p].oor=t[p].aand=a[l];
				return ;
			}
			build(ls,l,mid,d),build(rs,mid+1,r,d),t[p]=t[ls]+t[rs];
		}
		inline aa ask(int p,int l,int r,int vl,int vr)
		{
			if(vl<=l&&vr>=r) return t[p];
			if(vr<=mid) return ask(ls,l,mid,vl,vr);
			if(vl>mid) return ask(rs,mid+1,r,vl,vr);
			return ask(ls,l,mid,vl,vr)+ask(rs,mid+1,r,vl,vr);
		}
}T[35];
signed main()
{
	freopen("peace.in","r",stdin),freopen("peace.out","w",stdout);
	read(n,m);
	for(int i=1;i<=n;i++) read(a[i]);
	for(int i=0;i<=30;i++) T[i].build(1,1,n,i);
	for(int l,r;m;m--)
	{
		read(l,r); aa pos[35],pre[35],suf[35]; bool flag=0;
		for(int i=0;i<=30;i++) pos[i]=pre[i]=suf[i]=T[i].ask(1,1,n,l,r);
		for(int i=1;i<=30;i++) pre[i]=pre[i-1]+pos[i];
		for(int i=29;~i;i--) suf[i]=suf[i+1]+pos[i];
		for(int i=0;i<=29;i++) flag|=(pre[i].cnt&&suf[i+1].cnt&&pre[i].oor==suf[i+1].aand);
		for(int i=0;i<=30;i++) flag|=(pos[i].cnt>1&&pos[i].oor==pos[i].aand&&pre[i].oor==suf[i].aand);
		puts(flag?"YES":"NO");
	}
}

T3 摆烂合唱

需要知道什么是表达式树,然后就没有然后了,\(f_{x,0/1}\) 表示 \(x\) 为 \(0/1\) 概率,显然这两个概率加起来为 \(1\)。

  • 异或:\(f_{x,0}=f_{ls,0}\times f_{rs,0}+f_{ls,1}\times f_{rs,1},f_{x,1}=1-f_{x,0}\)。
  • 或:\(f_{x,0}=f_{ls,0}\times f_{rs,0},f_{x,1}=1-f_{x,0}\)。
  • 与:\(f_{x,1}=f_{ls,1}\times f_{rs,1},f_{x,0}=1-f_{x,1}\)。

然后再遍历一遍输出即可:

  • 异或:不管相邻项选什么此时填 \(0/1\) 答案都不同。
  • 或:相邻项选 \(0\),则此时填 \(0/1\) 答案不同。
  • 与:相邻项选 \(1\),则此时填 \(0/1\) 答案不同。
点击查看代码
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=4e5+10,P=998244353,inv=499122177;
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,pos,tot,ls[N],rs[N],f[N][2]; char s[N],t[N];
inline int mod(int x,int y) {return (x+=y)>=P?x-P:x;}
inline int dfs()
{
	int x=++tot; if(s[++pos]=='x') return t[x]='x',f[x][0]=f[x][1]=inv,x;
	ls[x]=dfs(),t[x]=s[++pos],rs[x]=dfs(),pos++;
	switch(t[x])
	{
		case '^':
			f[x][0]=mod(1ll*f[ls[x]][0]*f[rs[x]][0]%P,1ll*f[ls[x]][1]*f[rs[x]][1]%P);
			f[x][1]=P+1-f[x][0]; break;
		case '|':
			f[x][0]=1ll*f[ls[x]][0]*f[rs[x]][0]%P;
			f[x][1]=P+1-f[x][0]; break;
		case '&':
			f[x][1]=1ll*f[ls[x]][1]*f[rs[x]][1]%P;
			f[x][0]=P+1-f[x][1]; break;
	}
	return x;
}
inline void print(int x,int ans)
{
	if(t[x]=='x') return write(ans),puts(""),void();
	switch(t[x])
	{
		case '^': print(ls[x],ans),print(rs[x],ans); break;
		case '|':
			print(ls[x],1ll*ans*f[rs[x]][0]%P);
			print(rs[x],1ll*ans*f[ls[x]][0]%P); break;
		case '&':
			print(ls[x],1ll*ans*f[rs[x]][1]%P);
			print(rs[x],1ll*ans*f[ls[x]][1]%P); break;
	}
}
signed main()
{
	freopen("binary.in","r",stdin),freopen("binary.out","w",stdout);
	read(n),scanf("%s",s+1),dfs(),print(1,1);
}

T4 对称旅行者

有这题?

标签:20,rs,int,void,多校,read,ls,inline,NOIP2024
From: https://www.cnblogs.com/Charlieljk/p/18543602

相关文章

  • [GYCTF2020]Blacklist 1
    [GYCTF2020]Blacklist1打开实例发现get提交框,提交1发现显示尝试万能密码无果尝试联合注入,显示出了过滤规则,可以见到很多关键字都被过滤了尝试堆叠注入,成功显示出数据表?inject=1';showdatabases;查表?inject=1';usectftraining;showtables;看到了个FLAG_TABLE......
  • Z-library电子图书馆入口/最新可用镜像网址 (2024持续更新)
    Z-Library(简称Z-Lib,前身为BookFinder)是一个影子图书馆网站,用户可在上面下载期刊、文章以及各类书籍,其共收录了超过1000w本书籍和8000w篇文章。因为版权问题,网站曾于2022年11月3日遭到封锁,但是强大的Z-Library有新的官方网址和镜像(不过镜像网站不太稳定),获得了重生。......
  • P8314 [COCI2021-2022#4] Parkovi
    最大值最小是二分答案的特征。二分完后每个公园可以覆盖距离不超过\(k\)的领域,要覆盖整棵树。二分完后需要check。最可能的路线是贪心和dp。好像本质上都存储了可能成为答案的组合的部分信息,但贪心确定了这个组合当前的唯一性,dp并没有,只能保证最优解一定属于被划分出来的某......
  • 零基础入门大模型教程,2024最详细的学习路线,让你少走99%弯路!
    第一阶段:基础理论入门目标:了解大模型的基本概念和背景。内容:人工智能演进与大模型兴起。大模型定义及通用人工智能定义。GPT模型的发展历程。第二阶段:核心技术解析目标:深入学习大模型的关键技术和工作原理。内容:算法的创新、计算能力的提升。数据的可用性与规模性......
  • [GXYCTF2019]BabySQli 1
    [GXYCTF2019]BabySQli1打开实例发现是个登录页,查看源代码未发现有效信息,admin登录,显示密码错误,发现参数name和pw查看源代码发现base编码解密发现是base32+base64混合编码,并发现解密后的SQL语句,判断注入点为usernameselect*fromuserwhereusername='$name'尝试万......
  • 2024-11-13 uniapp自定义全局弹窗并可以通过uni来调用【转载】
    新建三个文件: dialog.js:exportdefault{/*链接处理*/getLink(params){leturl="/components/dialog/index";if(params){letparamStr="";for(letnameinparams){param......
  • 百度世界大会2024,当应用遇上AI,未来已来
    大家好,我是小悟。各位科技爱好者小伙伴们,是不是觉得每天都在追新,却总是被新的科技热点甩在身后。就在2024年11月12日,于上海世博中心举办以“应用来了”为主题的百度世界大会2024,是一场让人眼花缭乱的科技盛宴。1、AI新篇章,让生活更“智能”这次大会上,百度展示了一系列令......
  • 每日新闻掌握【2024年11月12日 星期二】
    2024年11月12日星期二 农历十月十二 大公司/大事件 人形机器人产业链捷报频传,机构指出产业链年底有望迎来定点特斯拉CEO埃隆·马斯克透露,特斯拉正在改进Optimus机器人的设计,以解决生产过程中的关键瓶颈问题,“Optimus已经在工厂里执行一些任务,其能力范围正在迅速扩......
  • 每日新闻掌握【2024年11月11日 星期一】
    2024年11月11日星期一 农历十月十一 大公司/大事件 国产新机上市,老款iPhone跌至半价近期,国产品牌新机先后上市,掀起新一轮换机潮。对于本土品牌新机上新,苹果则面临着巨大市场竞争压力。IDC最新数据显示,2024年第三季度,苹果凭借年度新品的上市,以15.6%的市场份额重返中......
  • 微信小程序 - 解决报错{“errno“:600001,“errMsg“:“request:fail errcode:-202cronet_
    前言关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。在微信小程序开发中,详细解决小程序请求接口报错:{“errno”:600001,“errMsg”:“request:failerrcode:-202cronet_error_code:-202error_msg:net::ERR_CERT_AUTHORITY_INVALID”},微信小程序发起网络请求......