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

NOIP2024 前集训:多校A层冲刺NOIP2024模拟赛 27 终结篇

时间:2024-11-28 19:57:21浏览次数:6  
标签:27 unlocked int void 多校 Tp read inline NOIP2024

前言

点击查看代码
《蜂鸟》

传说中人类在远早

住于黑暗的地下之遥

派出了娇小的蜂鸟

找到通往光明的隧道

飞过了一座一座岛

好想有一个地方落脚

把一个一个梦制造

会不会有人能够听到

寻找太阳的梦 自不量力说

自己也变成太阳的念头

有时候寂寞 几乎扛不动

咽在喉咙里无人诉说

我们到底在追求些什么

为何一直不断往前冲

捏出血的双手

忘了也能够 稍微退后

我们总是以为能够自由

回过头那世界却依旧

哎 爱它来的时候

紧握的拳头 别忘了捉那个梦

传说中愤怒的恶魔

曾让这地球四处着火

一只蜂鸟收集云朵

火在雨中变成了彩虹

我们在孤单中探索

危险世界美丽的渴求

就算这力量再微弱

也想牵你手一起挣脱

寻找太阳的梦 自不量力说

自己也变成太阳的念头

有时候寂寞 几乎扛不动

咽在喉咙里无人诉说

我们到底在追求些什么

为何一直不断往前冲

捏出血的双手

忘了也能够 稍微退后

我们总是以为能够自由

回过头那世界却依旧

哎 爱它来的时候

紧握的拳头 别忘了捉

那个梦 来到我的身旁 收拢世界的光

我想要成为自己 也成为你的光

我们到底在追求些什么

为何不断往前冲

捏出血的双手

忘了也能够 稍微退后

我们到底在追求些什么

为何一直不断往前冲

捏出血的双手

忘了也能够 稍微退后

我们总是以为能够自由

回过头那世界却依旧

哎 爱它来的时候

紧握的拳头 别忘了捉那个梦

我那个梦

我那个梦

寂寞中拍打的翅膀

终于找到你一起飞翔

渺小却带来了神话

你看这世界开满了花

今天中午放的每日一歌,虽然放了好多次了,今天还是放上来了,算是唱出 OIer 们的心声了。

终结赛,没挂分是好的,因为本来也没多少分可以挂,暴力没打满,确切地说是没打完,T2 构造直接跳了,T3 一直想怎么优化 DP 没想过去推结论。

考完后高二放假高一不放,因为他们下周学考所以我们下周放的时间长,不过好像脑瘫老班不想让我们放,到时候再说吧反正我肯定是不接受的,回来就要补文化课了,可能到时候就要和好多人说再见了,所以《一期一会》等游记或补文化课的时候推。

NOIP rp++。

自觉忽略题目名称。

T1 【模板】分治FFT

发现每一种情况的结果都是一样的,所以直接乘上方案数即可,方案数为 \(\prod\limits_{i=2}^n\text{C}_i^2\)。

点击查看代码
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define sort stable_sort
using namespace std;
const int N=1e5+10,P=998244353;
template<typename Tp> inline void read(Tp&x)
{
	x=0;register bool z=true;
	register char a=getchar_unlocked();
	for(;!isdigit(a);a=getchar_unlocked()) if(a=='-') z=0;
	for(;isdigit(a);a=getchar_unlocked()) x=(x<<1)+(x<<3)+(a^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,a[N]; ll ans,sum;
inline ll qpow(ll a,int b)
{ll res=1; for(;b;(a*=a)%=P,b>>=1) (b&1)&&((res*=a)%=P); return res;}
inline int mod(int x,int y) {return (x+=y)>=P?x-P:x;}
signed main()
{
    freopen("fft.in","r",stdin),freopen("fft.out","w",stdout);
	read(n); for(int i=1;i<=n;i++)
        read(a[i]),ans=mod(ans,a[i]*sum%P),sum=mod(sum,a[i]);
    sum=1; for(int i=2;i<=n;i++)
        (ans*=sum)%=P,(sum*=(i+1)*qpow(i-1,P-2)%P)%=P;
    return write(ans),puts(""),0;
}

T2 【模板】最近公共祖先

好像这种贪心加构造的题从来就没做出来过?

考虑跑出来一棵生成树,那么根据子节点有无非树边进行贪心,显然先选深度最大且有非树边的,没有非树边了之后就要和父亲连了,之后删掉这个点即可。

点击查看代码
#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 a=getchar_unlocked();
	for(;!isdigit(a);a=getchar_unlocked()) if(a=='-') z=0;
	for(;isdigit(a);a=getchar_unlocked()) x=(x<<1)+(x<<3)+(a^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,tot=1,head[N],nxt[N<<1],to[N<<1]; bool vis1[N],vis2[N<<1];
struct aa {int x,y,z;}; vector<aa>ans; vector<int>e[N];
inline void add(int x,int y) {nxt[++tot]=head[x],to[tot]=y,head[x]=tot;}
inline bool dfs(int x,int t)
{
	if(vis1[x]) return 1; vis1[x]=1;
	for(int i=head[x],y;y=to[i];i=nxt[i]) if(y!=t&&!vis2[i])
	{vis2[i]=vis2[i^1]=1; if(dfs(y,x)) e[x].push_back(y);}
	for(int i=1;i<e[x].size();i+=2) ans.push_back({e[x][i],x,e[x][i-1]});
	if(!(e[x].size()&1)) return 1;
	if(t) ans.push_back({e[x].back(),x,t}); return 0;
}
signed main()
{
	freopen("lca.in","r",stdin),freopen("lca.out","w",stdout);
	read(n,m); for(int i=1,x,y;i<=m;i++) read(x,y),add(x,y),add(y,x);
	for(int i=1;i<=n;i++) if(!vis1[i]) dfs(i,0);
	write(ans.size()),puts(""); for(auto x:ans) write(x.x,x.y,x.z),puts("");
}

T3 【模板】普通平衡树

这是真结论题了,虽然结论很好证,但赛时光想着优化 DP 了,所以有时候 DP 做不了的要想想别的。

因为 \(x\) 互不相同啊,手玩一下发现答案就是 \(\sum\limits_{i=2}^{len-1}[a_{i-1}<a_i\wedge a_i>a_{i+1}]+[a_{i-1}>a_i\wedge a_i<a_{i+1}]\),这个东西可以线段树直接维护,具体的,分别维护两个左右端点,全是单点查所以没有 pushup 只有 pushdown,考虑 pushdown 下去的东西的一定在接在之前的后面,所以直接转移即可,特判 \(len<2\) 的情况。

点击查看代码
#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=3e5+10;
template<typename Tp> inline void read(Tp&x)
{
	x=0;register bool z=true;
	register char a=getchar_unlocked();
	for(;!isdigit(a);a=getchar_unlocked()) if(a=='-') z=0;
	for(;isdigit(a);a=getchar_unlocked()) x=(x<<1)+(x<<3)+(a^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;
inline bool check(int x,int y,int z) {return (x<y&&y>z)||(x>y&&y<z);}
struct aa
{
	int len,num,l1,l2,r1,r2;
	inline aa() {len=num=l1=l2=r1=r2=0;}
	inline aa(int x) {len=1,num=0,l1=l2=r1=r2=x;}
	inline void operator += (aa const &a)
	{
		if(!a.len) return ; if(!len) return *this=a,void();
		num+=(len>1&&check(r1,r2,a.l1)),num+=(a.len>1&&check(r2,a.l1,a.l2));
		len==1&&(l2=a.l1),r1=a.len==1?r2:a.r1,num+=a.num,len+=a.len,r2=a.r2;
	}
}t[N<<1];
inline void spread(int p,int l,int r) {t[ls]+=t[p],t[rs]+=t[p],t[p]=aa();}
inline void add(int p,int l,int r,int vl,int vr,int d)
{
	if(vl<=l&&vr>=r) return t[p]+=aa(d),void(); spread(p,l,r);
	if(vl<=mid) add(ls,l,mid,vl,vr,d); if(vr>mid) add(rs,mid+1,r,vl,vr,d);
}
inline int ask(int p,int l,int r,int x)
{
	if(l==r) return min(t[p].num+2,t[p].len); spread(p,l,r);
	return x<=mid?ask(ls,l,mid,x):ask(rs,mid+1,r,x);
}
signed main()
{
	freopen("odt.in","r",stdin),freopen("odt.out","w",stdout);
	for(read(n,m);m;m--)
	{
		int op,l,r,x; read(op);
		if(op&1) read(l,r,x),add(1,1,n,l,r,x);
		else read(x),write(ask(1,1,n,x)),puts("");
	}
}

T4 【模板】平面最近点对

2-sat,不改。

标签:27,unlocked,int,void,多校,Tp,read,inline,NOIP2024
From: https://www.cnblogs.com/Charlieljk/p/18575041

相关文章

  • 多校A层冲刺NOIP2024模拟赛27终结篇
    多校A层冲刺NOIP2024模拟赛27终结篇\(T1\)A.【模板】分治FFT\(0pts\)将式子展开后是一个形如\(f_{n}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{i-1}a_{i,j}\)的形式。考虑\(f_{n}\)如何转移。当我们选出一对\((i,j)\)进行合并进入\(n'=n-1\)的子问题,故\(a_{i}......
  • noip2024 复习计划
    大致分三步:基本模板、套路复习套题复盘再刷一两道码力题基本模板复习有(参照csp2024套题复盘表):1.数据结构平衡树线段树、树状数组的Trick2.杂算法CDQ分治、整体二分、点分治、点分树KMP(其实不用复习了)3.图论Dijkstra板子,以及最小生成树......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛27终结篇
    Rankrp++A.【模板】分治FFT签。没取模挂50pts。列出式子发现无论何种合并方式,最终权值均为\(\sum_{i=1}^n\a_i\times(\sum_{j=i}^n\a_i)\),因此求方案数即可。发现每一步相当于从当前堆数中任选两个出来,容易得出方案数为\(\prod_{i=2}^{n}\binom{i}{2}\)。时间复杂度......
  • [赛记] NOIP2024加赛8
    大抵是NOIP前写的最后一篇题解了吧。。。flandre80pts赛时打的错解A了,然后证伪以后写了个更错的错解80pts;考虑我们最终要求的答案是$a$数组从小到大排序后的一个后缀;考虑怎样证明这个结论,感性理解一下就是尽量选大的然后挺对;考虑比较严谨的证明;如果序列中没有重复的......
  • 每日一题Online Judge(OJ)1273 哥德巴赫猜想的所有解
    OKnow每日一题来了哦 今天题目是OnlineJudge(OJ)编号为1273的哥德巴赫猜想的所有解现在让我们一起来seesee题目以下为哥德巴赫猜想简介(1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和。质数是指除......
  • 左侧导航栏element -2024/11/27
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>首页</title><style>.demo-table-expand{font-size:0;}.demo-table-expand......
  • 2024.11.27
    您遇到的org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.binding.BindingException:Parameter'taskId'notfound.Availableparametersare[arg1,arg0,param1,param2]错误通常是由于MyBatis在执行SQL语句时无法找到对应的参数......
  • Java学习笔记——2024.11.27
    2024.11.27一、字符类型1.字符类型初探可以存放一个汉字(2字节)或者数字(这个c4存储的应该是ASCII编码为97的字符,也就是a)2.字符类型细节publicclassChardetial{publicstaticvoidmain(String[]args){charc1=97;System.out.println(c1)......
  • 11月27日记录(《代码大全》精读笔记)
    《代码大全(第二版)》是SteveMcConnell所著的经典软件开发书籍,其中关于变量和语句的讨论深刻影响了无数程序员的编程实践。以下是对这部分内容的精读体会:变量命名的重要性:变量的命名是编码中最为直观的文档形式。一个好名字能够清晰地传达变量的用途和含义,减少代码的阅读难度。书......
  • 11/27语法
    感叹句的用法:⭐️⭐️⭐️⭐️⭐️感叹句是用来表达强烈情感的句子,通常使用感叹调并在句末使用感叹号(!)。‌感叹句可以通过“how”和“what”来引导,这两种形式是最常见的感叹句结构。‌12感叹句的基本用法‌由“how”引导的感叹句‌:‌结构‌:How+形容词/副词+主语+谓语!‌用法‌:修饰......