首页 > 其他分享 >24暑集训Week1

24暑集训Week1

时间:2024-07-28 21:29:37浏览次数:12  
标签:24 205 int long cdots Week1 mod 集训 define

24暑集训Week1

夜行的人,若你不唱歌的话,不惊醒这黑夜的话,就永远也走不出呼蓝别斯了。 这重重的森林,这崎岖纤细的山路,这孤独疲惫的心。 亲爱的,哪怕后来去到了城市,$$走$$夜路时也要大声地唱歌,像喝醉酒的人一样无所顾忌。 大声地唱啊,让远方的大棕熊也听到了,也静静起身,为你在遥远的地方让路。 ——李娟《走夜路请放声歌唱》

【2024.07.22】NOIP2024暑假集训模拟赛(1)

A

B

  • 抽 \(n\) 次卡, 连续 \(i\) 次没有抽中时, 第 \(i+1\) 次抽中的概率是 \(p_i\), 规定\(p_k=1\), 求期望抽中次数.
  • 标签:矩阵加速递推, 动态规划.
  • 暴力: 记 \(f[i][j]\) 表示已经抽了 \(i\) 次, 目前连续 \(j\) 次不中的期望抽中次数,有转移:

\[f[i][j]=f[i-1][j-1] \times (1-p[j-1]) \\ f[i][0]=\sum_{j=0}^{k}f[i-1][j] \times p[j] \]

  • 时间复杂度 \(O(NK)\).

  • 优化:矩阵加速递推

  • \[\begin{bmatrix} p_0 & p_1 & p_2 & \cdots & p_k & 0 \\ 1-p_0 & 0 & 0 & \cdots & 0 & 0 \\ 0 & 1-p_1& 0 &\cdots & 0 & 0 \\ 0 & 0 & 1-p_2&\cdots & 0 & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots\\ 0 & 0 & \cdots & 1-p_{k-1} & 0 & 0\\ 0 & 0 & \cdots & 0 & 0 & 0 \\ p_0 & p_1 & p_2 & \cdots & p_k & 1 \\ \end{bmatrix} \times \begin{bmatrix} f_{0} \\ f_{1} \\ f_{2} \\ \vdots \\ f_{k} \\ res \\ \end{bmatrix} \]

  • 记矩阵为 \(A\)(一个 边长为 \(k+2\) 的方阵), 列向量为 \(F_0\)(其中 \(f_i=1,f_{1 \sim k}=0\))

  • 先用矩阵快速幂求出 \(A^n \times F_0\), 答案就是 \(res\)

  • 时间复杂度:本来是\(O(K^3 \times log_2^N)\), 但有一个小优化是每次 y&1=1 的时候不要另开一个单位矩阵存答案, 直接累计到那个行向量里面,这样时间复杂度会有一个 \(\frac{1}{2}\) 的常数, 会快一倍

#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)
using namespace std;
using ll = long long;
const int mod=998244353;
int a[205],b[205],p[205];
int n,k;
struct matrix{
	int a[205][205];
	void init(int val=0){
		memset(a,0,sizeof(a));
		F(i,0,k+1) a[i][i]=val;
	} 
}v;
matrix operator $ (matrix A,matrix B){
	matrix C; C.init(0);
	F(i,0,k+1) F(j,0,k+1) F(z,0,k+1) C.a[i][z]=(C.a[i][z]+1ll$A.a[i][j]$B.a[j][z]%mod)%mod;
	return C;
}
void ksm(matrix A,int b){
	int f[205],g[205];
	memset(f,0,sizeof(f));
	f[0]=1;
	while(b){
		if(b&1){
			memset(g,0,sizeof(g));
			F(i,0,k+1) F(j,0,k+1) g[i]=(g[i]+1ll$A.a[i][j]$f[j])%mod;//优化在这里,单次变成K^2
			memcpy(f,g,sizeof(f));
		} 
		A=A$A;
		b>>=1;
	}
	cout<<(f[k+1]%mod+mod)%mod;
}
int quickmod(int x,int y){
	int res=1;
	while(y){
		if(y&1) res=1ll$res$x%mod;
		x=1ll$x$x%mod;
		y>>=1;
	} return res;
}
signed main(){
	freopen("card.in","r",stdin);
	freopen("card.out","w",stdout);
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin>>n>>k;
	F(i,0,k-1){
		cin>>a[i]>>b[i];
		p[i]=1ll$a[i]$quickmod(b[i],mod-2)%mod;
	} p[k]=1;
	v.init(0);
	F(i,0,k) v.a[0][i]=v.a[k+1][i]=p[i];
	F(i,1,k) v.a[i][i-1]=1-p[i-1];
	v.a[k+1][k+1]=1;
	ksm(v,n);
	return 0;
}

C

  • 线性基

D

  • 点分治

【2024.07.24】NOIP2024暑假集训模拟赛(2)

A

  • 一句话题意:给定 \(n,T,s_i\) , 询问有多少个四元组 \((a,b,c,d)\) 满足 \(\lfloor \frac{s_a}{s_b} \rfloor + \lfloor \frac{s_c}{s_d} \rfloor = T\), \(n,s_i,T \le 1e6\).

  • 先枚举分母是整除分块,时间复杂度 \(O(N\sqrt N)\) 据说drz卡过去了 ; 先枚举分子是调和级数, 时间复杂度 \(O(Nlog 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)
using namespace std;
using ll = long long;
const int N=1e6+3;
const int mod=998244353;
char buf[100],$p1=buf,$p2=buf;
inline int gc(){return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100,stdin),p1==p2)?EOF:$p1++;}
inline int rd(){
	int x=0; char ch;
	while(!isdigit(ch=gc()));
	do x=(x<<3)+(x<<1)+(ch^48); while(isdigit(ch=gc()));
	return x;
}
int n,x,m=0,ans=0;
int a[N],num[N],sum[N],t[N];
signed main(){
	freopen("floor.in","r",stdin); 
	freopen("floor.out","w",stdout);
	n=rd(),x=rd();
	F(i,1,n) num[a[i]=rd()]++;
	F(i,1,1000000) sum[i]=sum[i-1]+num[i];
	//  a/b=0
	F(i,1,1000000) t[0]=(t[0]+1ll$sum[i-1]$num[i])%mod;
	//     a/i = j
	F(i,1,1000000){
		for(int j=1;j$i<=1000000;++j){
			t[j] = (1ll$t[j]+(1ll$sum[min(1000000,i$(j+1)-1)]-sum[i$j-1]) $ num[i]%mod)%mod;
		}
	}
	F(i,0,x) ans=(ans+1ll$t[i]$t[x-i]%mod)%mod;
	printf("%d",(ans+mod)%mod);
	return 0;
}

B

  • 异或

C

  • 线段树,滑动窗口

D

  • CDQ分治, 线段树

【2024.07.26】NOIP2024暑假集训模拟赛(3)

A

  • 考虑什么样的操作合法:
  1. k 一定是 \(mex(a)\).
  2. 所有值为 \(mex(a)+1\) 的位置必须被覆盖。
  3. 对于所有 \(i\in[0,mex(a)−1]\) 的位置不能全被覆盖。

如果 \(a\) 中没有 \(m\)\(e\)\(x\)(\(a\))+1,那只要\(mex(a)\) 不为 \(n\) 就总能找到一个不用的位置赋值。

否则,我们记录值为 \(mex(a)+1\) 的最靠前和最靠后的位置,覆盖,然后判断是否符合 \(3\) 即可。

\(B\)

  • 记每个位置的权值为 \(i \times a_i\) , 记总和为 \(S\), 1操作不会使 \(S\) 改变, 每次2操作 \(S+1\).
  • 所以只有那个唯一使用 2操作的 \(S\) 不同, \(\Delta S\) 即为 2操作次数.
#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 pii pair<int,int>
#define fi first
#define se second
#define mk make_pair
#define eb emplace_back
#define int long long
using namespace std;
using ll = long long;
int T,m,n;
signed main(){
	freopen("b.in","r",stdin); 
	freopen("b.out","w",stdout);
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin>>T; while(T--){
		cin>>m>>n;
		int ws1=-1,ws2=-1,num1=0,num2=0,ps1=-1,ps2=-1,x;
		F(i,1,m){
			int ws=0;
			F(j,1,n) cin>>x,ws+=j*x;
			if(ws1==-1) ws1=ws,num1=1,ps1=i;
			else if(ws1==ws) ++num1;
			else if(ws2==-1) ws2=ws,num2=1,ps2=i;
			else if(ws2==ws) ++num2;
		}
		if(num1>1) cout<<ps2<<" "<<ws2-ws1<<"\n";
		else cout<<ps1<<" "<<ws1-ws2<<"\n";
	}
	return 0;
}

C

  • 给定 \(n\) 个点,每个点上有一个长为 \(m\) 的字符串(仅包含字母 \(Y\) 和 \(N\) ),两个点之间的边权为两个字符串不同元素个数,求最小生成树边权和。

  • 用2进制预处理所有的字符串, 记 \(f[i][j]\) 表示到 \(i\) 距离为 \(j\) 的一个点(任一个点都可以,因为每次搜索完当前位, \(f[i][j]\) 都会更新(见代码), 同样优的点会在前面被用到(大概是这样吧), 所以任记录一个就行)

  • 折半搜索, 每次枚举一对 \((a,b)\) 使 $dis(a,i) = j , dis(b,i) = j , dis(a,b)=1 $, 即枚举一条权值为 \(1\) 的边.

D

  • 线段树

【2024.07.27】NOIP2024暑假集训模拟赛(4)

B

  • 字符串模拟

C

D

  • 线段树,dp

标签:24,205,int,long,cdots,Week1,mod,集训,define
From: https://www.cnblogs.com/superl61/p/18328897

相关文章

  • IDEA 2024最新永久安装使用教程
    在软件开发的世界里,IntelliJIDEA作为Java、Kotlin等多语言开发者的首选IDE(集成开发环境),以其强大的功能、灵活的扩展性和卓越的智能辅助功能赢得了广泛的赞誉。随着人工智能(AI)技术的飞速发展,IntelliJIDEA也紧跟时代步伐,通过引入一系列AI编程插件,极大地提升了开发者的编码效率、代......
  • 视野修炼-技术周刊第94期 | 2024 开发者调查报告
    欢迎来到第94期的【视野修炼-技术周刊】,下面是本期的精选内容简介......
  • XMind v2024 解锁版下载及安装教程 (全球领先的商业思维导图软件)
    简述XMind是一款专业的全球领先的商业思维导图软件,在国内使用广泛,拥有强大的功能、包括思维管理、商务演示、与办公软件协同工作等功能。它采用全球先进的EclipseRCP软件架构,是集思维导图与头脑风暴于一体的可视化思考工具,能用来捕捉想法、理清思路、管理复杂信息并促进......
  • 中望CAD 机械 v2024 解锁版下载及安装教程 (CAD三维制图)
    简述中望CAD机械版是一款国产CAD制图软件,专为机械设计而打造。中望CAD机械版2024中文版拥有丰富的标准零件图库,提供绘图标准规范,并支持定制化需求。其智能注释功能更是一大亮点,通过一个命令即可完成80%的标注工作,极大提高了绘图效率。一、下载地址下载链接:中望CAD机械......
  • SMU Summer 2024 div2 3rd
    文章目录TheThirdWeek一、前言二、算法1.KMP算法2.线性DP<1>(最长上升子序列II)3.背包DP<1>(「木」迷雾森林)4.其它<1>(Ubiquity)三、总结TheThirdWeek战略上藐视敌人,战术上重视敌人————毛泽东主席一、前言周六打了场cf,只过了俩题而且比较慢,给我的id上......
  • 2024暑假集训测试14
    前言比赛链接。最可惜的一点还是本来T3暴力能拿\(20\),优化成\(15\)了,不然就rk2了,晚上可能又有泡面吃了。不过因为T2、T4两道水题,剩下两道不太可做(至少对于我是这样的),这两题不挂分的打的貌似都不错。T3没学过莫反输麻了。T1黑暗型高松灯本来应该是T4,学长特意......
  • 2024/07/28 每日一题
    LeetCode699掉落的方块方法1:暴力classSolution:deffallingSquares(self,positions:List[List[int]])->List[int]:n=len(positions);ans=[0]*n#记录每个方块落下后的高度fori,(left0,widen0)inenumerate(positions):......
  • 暑假集训csp提高模拟10
    赛时rank19,T10,T225T310T4100T3挂了10pts?数学专场,套路专场,烧脑专场。幸亏我还有缓存的李超树博客,最后一个小时就溜了去打数据结构。数学好难,拜谢数学。T1黑暗型高松灯CompanyAcquisitions要用势能分析,鞅的停时定理。由于赛时这个放T1非常逆天,所以整场比赛的奖......
  • 大创项目个人周报(2024.7.22—2024.7.28)
    本周个人情况汇报我本周主要学习了安卓开发的内容,根据《第一行代码Android》开展了学习。一、分析自己的第一个Android程序通过看书,我对项目的各个文件的功能有了大致了解,除app目录外,大多数文件和目录是自动生成的,app目录是今后开发工作主要涉及的部分。app的结构如下。......
  • 2024牛客多校第四场F.Good Tree 挑战全网最详解
    好吧标题党了一回,但我相信有不少人被出题人的那句“手玩一下就知道了”无语住了像我这种憨憨一旦想偏了就救不回来了,于是困惑了好久,在雨巨的指导下彻底搞懂(此处大声谢谢雨巨,又有实力又会讲题又认真答疑每一个问题,呜呜呜我永远的姐)题意简单来说就是定义f(i)为树上i点到其他所有......