codeforces 数学博弈论 100 题 30 天专项训练

害怕结果还是害怕错过,
问自己,
一句我在怕什么,
如果没有明天给我浪费和沉默...

Day 1

1265B

思路 1 从某个 \(a_i\) 出发

  1. \(m\) 是美丽数字等价于存在长度为 \(m\) 的连续区间是 \(1,2,...,m\) 的排列。
  2. \(a_i=m\),计算最小的 \(l(\le i)\)\(r\ge i\),使得 \(\max\limits_{l\le i\le r}a_i=m,\)\(m\) 是美丽数字等价于 \(r-l+1=m\)

思路 2 从美丽数字出发

  1. \(m\) 是美丽数字等价于 \(\max\limits_{1\le i\le m}pos_i-\min\limits_{1\le i\le m}pos_i=m-1\)

1215B

思路 1

  1. 考虑以 \(i\) 为结尾的正子串个数 \(pos_i\) 与负子串个数 \(neg_i\)
  2. 可根据 \(a_i\) 的正负,分类讨论转移。

思路 2

  1. 预处理前 \(i\) 个数字乘积的正负性。

Day 2

1285C

思路

  1. 一定存在互质的 \(a,b\) 使得:\(\max(a,b)\) 最小且 \([a,b]=x\)
  2. 因此,只需枚举 \(x\) 的所有因子 \((d,\frac{x}{d})\)

1295D

思路

  1. \(d=\gcd(a,m)\),则 \(d|(a+x)\),进而 \(x=kd,0\le k< m',m'=\frac{m}{d}\)
  2. \(d=\gcd(a+x,m)=\gcd(a+kd,m)=d\gcd(k+a',m'),a'=\frac{a}{d}\),即求 \(\gcd(k+a',m')=1\)\(k\) 的个数。
  3. \(k+a'\in[a',m']\cup[m',a'+m'-1]\)
  4. \(\forall m'+l \in [m',a'+m'-1]\)\(\gcd(m'+l,m')=\gcd(l,m')\)
  5. 因此求,\(\gcd(x,m')=1\)\(x\) 的个数,即欧拉函数在 \(m'\) 处的取值。

\(\mathcal O(\sqrt{n})\)\(m\) 处的欧拉函数值

点击查看代码
for(int i=2;i*i<=m;i++){
	if(m%i==0){
		ans=ans/i*(i-1);
		while(m%i==0) m/=i;
	}
}
if(m>1) ans=ans/m*(m-1);

510D

思路

  1. 当指定选取 \(a_i\) 时,只需考虑 \(a_i\) 涉及到的质因子。
  2. 枚举指定选取元素 \(a_i\)

Day 3

407B

思路

  1. \(dp_i\) 为第一次到 \(i\) 所需要的步数。
  2. \(dp_{i+1}\) 则可模拟为:第一次到 \(i\) + 从 \(i\)\(p_i\)\(1\) 步 + 从 \(p_i\) 回到 \(i\) 的步数 + 从 \(i\)\(i+1\) 的一步。
  3. 难点在于发现:从 \(p_i\) 回到 \(i\) 的步数等于 \(dp_i-dp_{p_i}\)
posted @ 2025-06-28 11:29  shyiaw  阅读(13)  评论(0)    收藏  举报