年轻就像防御塔的镀层,而你的人生早晚都会来到14分钟|

EthanYates

园龄:3年7个月粉丝:3关注:1

二〇二三模拟赛

9.22

时间安排

7:40~7:50
看完A,没意识到勾股定理,第一时间的想法是解方程组
7:50~8:05
看了B,想到可以反向加边,但是没想到最远距离一定是到直径端点的距离,想了很长时间怎么合并,不会
8:05~8:15
看了C,感觉这个题可以骗
8:15~8:20
D只会暴力
8:20~8:40
先写了B的60pts部分分,然后重新想A
8:40~9:10
打表后发现这东西和直角三角形有关,第一反应用O(1)素性判断做
9:10~10:40
开始嗑C的骗分,把自己能想到的稍微有点正确性的都给写上了
10:40~11:00
又去看了B,觉得可能会有数据结构能够维护,但还是不会
11:00~11:20
写完D的暴力,考虑了一下数位DP,发现不会做
11:20~11:40
检查了一下,然后坐等结束

反思总结

  1. 对已学知识点理解不够好

题解

A
发现和直角三角形有关,推式子得到 b2=a212,c2=a212+1,然后考虑一下a为偶数的情况
B
并查集+直径的维护
C
骗过去的
D
一个特殊的性质,f(1018+n)f(n)=n,利用这一个就能确定 solve(l,r)l , r , 具体的就是考虑,solve(1,1018)=81×1018+1,假设 solve(1,1018)%a=p,那么答案就是 solve(1+(ap),1018+(ap))

9.24

时间安排

8:00~8:40
看题,除a没有会的
8:40~9:20
写完a
9:20~12:00
一直看b,想差分约束,然后坐牢

总结

  1. 智力感觉有所下降
  2. 认真看题面

题解

A
n遍dijkstra,然后建图,再跑dijkstra
B

#include <bits/stdc++.h>
#define mod 998244353
#define ll long long
using namespace std;
ll C[3005][3005],fact[3005];
void init()
{
	C[0][0]=1;
	for (int i=1;i<=3003;i++)
		for (int j=0;j<=i;j++)
		{
			if (i==1 || j==0) C[i][j]=1;
			else C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
		}
	fact[0]=1;
	for (int i=1;i<=3003;i++) fact[i]=fact[i-1]*i%mod;
	return;
}
void add(ll &x,ll y) {x+=y; x%=mod; return;}
ll dp[3005][3005];
int suml[3005],sumr[3005];
int m,n,l,r;
int main()
{
	init();
	cin>>m>>n;
	for (int i=1;i<=m;i++) {cin>>l>>r; suml[l]++; sumr[r]++;}
	for (int i=1;i<=n;i++) suml[i]=suml[i-1]+suml[i],sumr[i]=sumr[i-1]+sumr[i]; // 左区间 <=i 的人数(不一定覆盖到i), 右区间 <=i 的人数 
	dp[0][0]=1;
	for (int i=0;i<n;i++) // n 个 拍卖品 
		for (int j=0;j<=m;j++) // m 个人 
			if (dp[i][j]) //前i列,有j个R未满足 
			{
				l=suml[i+1]-suml[i]; //第 i+1 列有多少个左区间的端点,一定需要在这里被满足的左区间 
				r=sumr[i]-j; //之前满足了这么多个右区间 
				int rr=sumr[i+1]-sumr[i]; //这第i+1列一共有这么多个右区间的左端点 
				int lef=i+1-r-suml[i]; //现在前面还剩下lef个列可以选
				
				
				if (lef<0) continue; //如果lef<0没可能
				//case1:这列选给了一个R
				if (j+rr>=1 && lef>=1) add(dp[i+1][j+rr-1],dp[i][j]*(j+rr)%mod*C[lef-1][l]%mod*fact[l]%mod); 
				//case2:这列没选给一个R
				if (lef>=l) add(dp[i+1][j+rr],dp[i][j]*C[lef][l]%mod*fact[l]%mod); 
			}
	cout<<dp[n][0]<<endl;
} 

C
打表发现 02k1 中二进制表示下有奇数个 1 的数(下面统称为 oddk)和有偶数个 1 的数(下面统称为 evek)个数相同,严格证明考虑数学归纳法:

,k=0,odd0eve0

k=1,odd1=eve1

k=2,odd2=odd1+eve1,eve2=eve1+odd1(2122102111)

k=3,odd3=odd2+eve2,eve3=eve2+odd2

k=n,oddn=oddn1+even1,even=even1+oddn1

证毕
更进一步的
可以得到任意 02c1+2c2+...+2cn (ci0)eveodd 相等,所以只需要特判是否含有 20

剩下的只需要用做区间恢复,然后统计 oddeve 然后成起来就是答案,用线段树维护即可

D
首先,每个人都是独立的,也就是说,可以分开求每个人的期望

每个点被选的概率相等,当选了 x 个点时,概率就等于 (nx),再考虑求一个点对被选中的概率

对于一个固定的点对 (a,b),其出现次数就相当于同时选了这个点对对应的 ab,剩下的点随便选,也就是 (n2x2)

那么对于这个点对,被选中的概率就是

(n2x2)(nx)

最后答案就是 总的满足条件的点对数量×固定点对被选中的概率 得到的就是选中点对的期望

现在已经求出 固定点对被选中的概率,对于 总的满足条件的点对数量 可以直接点分治 O(nlogn)求得

10.06

时间安排

7:40~8:10

看完四道题,A,B都有点思路

8:10~8:40

A感觉可以直接线段树,于是码了一个线段树,大样例竟然一遍过了,对剩下几题感觉更有自信了

8:40~9:50

B感觉区间DP能做,于是推了很长时间式子,刚开始没意识到要用组合数,以为自己式子推错了,打算写个暴力出来,看看哪步转移不对。结果发现暴力不太好打,然后干脆就继续想哪里错了,9:50左右意识到需要组合数

9:50~10:20

补上组合数,然后又调了一阵子,大样例终于过了

10:20~11:10

C看着是有性质的,于是开始推,发现只要 2×2 的小矩阵满足就行了,因为时间不够了,于是就直接开码暴力

11:10~11:30

感觉D有思路,写出来之后不对,没调出来。在想D的时候,C突然就有思路了,想到它可能是交替的,但没有往下想,主要没想到C这么好写,当时感觉不太好实现

反思与总结

  1. 感觉C可惜了,主要B写的时间太长,没思考全面

  2. 感觉比较好的是,今天上午比较清醒,可能是和早晨早起了半个小时有关

10.13

7:40~8:10

看完题,t1很有思路,t2能贪,t3应该能做,但是不好写,t4想到了转移,但是不对

8:10~8:50

发现自己t1的做法需要维护的东西很多,于是狠心写了一个线段树和树状数组

8:50~9:40

t2感觉不难,好像直接贪心就行,没发现什么反例,于是很愉快的写完了

9:40~10:50

不知道为什么特别困,可能没睡好,做t3的时候有点不撑了,不过还是想到一个递归的构造方式

10:50~11:10

写完发现不对,然后惊喜的发现,棋子可以走八个方向,而我写的是四个方向的,gg

11:10~11:30

把自己构想的t4转移写完,然后果然不对。

总结与反思

一场下来,节奏差,还困,犯错多,不清醒,特别是当把t1、t2都写完时,有点不想想了

最难绷的还不是t1被卡了,最难绷的是t2原数组乘二了,线段树数组没乘二,100->45

考试意识不好,对题目难度估不准,把简单题做难,然后写代码问题多,总是忽视代码最基本的,像是数组大小,开不开longlong,哪里应该开longlong,哪里的边界应该是什么样的

其实我t4的转移挺接近的,但是想的太少了,也没时间往下想了

状态是对的,但是转移不全

这样想这场比赛还是有很多点是可以发挥的,但是没发挥出来

10.14

题解

t1 贪心+DP

t2 贪心+数据结构

t3 类似分形的构造

t4 计数DP

7:50~8:20

看完四道题,性质有点多,感觉这场不太好打,t1应该是并查集,t2应该就是个贪心

8:20~8:40

写完t1

8:40~9:40

t2写了很多种贪心方式,其中有一个是对的,有一个骗写挂了,导致后来wa了4个,其他的点因为写了个线段树全T了

9:40~10:20

Day 1

kitty

核心思路:将转移过程中的方案加入转移矩阵,边转移边累加

string

dp设计:f[i][x][y] 表示长度为 i,第一段以 x 结尾,且 xp,第二段以 p 开头,以 y 结尾的两段完全相同的序列的对数。

对于每个 p 答案就是 i=1nif[i][x][y]×2max(0,px1)

加个前缀和优化可以做到 O(n4)

优化:i 这维在转移的时候并没有用到,可以考虑将这维优化掉。设 g[x][y] 表示第一段以 x 结尾,且 xp,第二段以 p 开头,以 y 结尾的两段完全相同的序列的长度和。

那么当 sx=sy 时,就有转移:

f[x][y]=i<xj<yf[i][j]

g[x][y]=i<xj<yg[i][j]+f[i][j]

容易进行 二维前缀和优化,时间复杂度为 O(n3)

contact

类似 Kruskal

Day 2

decimal

注意到除法的借位类似于取模后 ×10

所以这道题可以考虑通过 ×10 取模快速到达小数点后第 L 位,然后暴力求即可。

labor

二分区间长度,然后求区间内逆序对个数即可。

具体的,对于长度为 len 的区间,先删去 ilen 的贡献,然后再加入 i 的贡献。

这个过程用树状数组维护即可。

distance

考虑当节点存在一个 子树大小 >n/2 时,那么它必定不是优秀的。因为可以通过移动这个点,使 1vn,vudis(u,v) 更小。

综上得到第一个性质:这个点必须是重心

对于一个点 u,要使它成为重心,需要让它的每个子树的大小都 n/2

到这里就可以直接考虑暴力的 换根dp,不过还可以继续对题目进行挖掘。

发现只有 rt(重心) 对应的 u 的子树个数是 >n/2 的,直接分类讨论即可。

worship

简述一下题意:求 1n 所有排列产生的贡献的和,每个排列的贡献是 i=1n1dep[lca(pi,pi+1)]

观察式子发现,产生的贡献实质上是连续段合并产生的,也就是说可以直接考虑连续段dp。

对于 u,v,w 三个点,uv,w 的祖先,v,w分别在 u 的两个子树里,产生贡献的情况只有:

__uv__w

__u__vw

__uvw__

这三种情况。设状态为 f[u][i],表示 u 的子树中,有 i 个连续段的答案,g[k][i][j] 表示将 i,j 个连续段合成 k 个连续段的方案数。

f[u][k]=f[v][i]f[w][j]g[k][i][j]dep[u]i+jk

再考虑 g 的转移。也是三种情况。

_ABABAB_

_ABABA__

_BABAB__

对应到式子上就是:

g[k][i][j]=1lmini,j2g[k1][il][jl]+

1lmini1,j2g[k1][il1][jl]+

1lmini,j12g[k1][il][jl1]

然后对斜线进行前缀和优化即可,时间复杂度为 O(n3)

Day 3

gameone

对于每一格。如果是红色,说明当前行比当前列染得靠后;如果是绿色,说明当前列比当前行染得靠后。

直接对每行每列加个标号,然后对每个格点建边,最后跑 TuoPu 判是否有环即可。

count

枚举 p,然后注意一下边界,直接组合计数即可。

tease

可重集完全错排问题。

反演不会,但是可以直接硬容斥。设 f[i][j] 表示考虑了 i 种数,有 j 个数不符合限制。

f[i][j]=k=0jf[i1][jk]×(1)k×(sz[i]k)×1(sz[i]k)!

brackets

将 "(" 看成 1,")" 看成 1,那么对于一个合法的括号序列就相当于所有前缀的和非负。

直接线段树维护即可。

Day 4

literary

正如题目一样。

考虑第一次如何注水,发现最多注 l+12。假设 l=5,如果我一次注 4,宙斯此时说 k=6,那么另一个海域只能再注 2,导致两个海域的差值 >1,因此不行。

第二次注水考虑让总水量补满 l,然后再一边降两滴。(举例:3 4 -> 5 4 -> 5 6,在这个过程中,所有经过的可能总水量,都满足两大海域只差 1。)所以第二次给另一海域降水量为 l+32,因为一边两滴也是从这个海域开始的,可以把两次降水合并起来。之后每次一边降 2 滴即可。

math

贪心。

只需知道区间内 1 的个数、只有一种质因子的数的个数(下面统称质数)、出现次数最多的数字就可以求出答案。用主席树维护即可。

具体的:

  1. 当这个区间有 1,没有合数(有至少两种质因子的数),只有一种质数时,不合法;
  2. 出现次数最多的数字出现 len/2 大于等于,可以把其他质数全部消掉;
  3. 出现次数最多的数字出现 len/2 小于,那么区间内所有质数肯定可以两两配对消掉或者余一个;
geography

首先对于一个边双内的点,肯定是可以相互到达的,直接缩点。问题变成一个树上问题。

相当于链标记,一个向上或向下的标记,判断两个标记是否同时存在即可。

标记可以树剖也可以树上差分。

history

只会离线做法。

CF526F

本文作者:EthanYates

本文链接:https://www.cnblogs.com/Ethan-Yates/p/17836555.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   EthanYates  阅读(5)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.
点击右上角即可分享
微信分享提示