首页 > 其他分享 >「模拟赛」多校 A 层联训 5

「模拟赛」多校 A 层联训 5

时间:2024-10-13 10:12:10浏览次数:7  
标签:背包 多校 一位 SOS 联训 SO 当前 times 模拟

A.好数(number)

很签,打完之后“不是这题我能做一个小时??”

对于每个数,都把它与前面的所有数的加和求一遍存进桶里,再遇到一个新数 \(a_i\) 时,枚举前面的所有 \(a_j,j\in [1,i-1]\),找桶里是否存在一个数 \(x\) 使得 \(x=a_i-a_j\) 即可。

因为这些数中有负数,所以我们可能会想到用 map 作为桶存加和,但这样(由于它相当购使的实现)相当于多挂了一个 \(\log\),本地跑大样例准确时间要 3 秒多,

发现数据范围是 \(-10^5\le a_i\le 10^5\),那么我们把所有数加上 \(10^5\),这样就不会存在负数情况了,直接用数组存就好了。整体复杂度 \(O(n^2)\)

B. SOS字符串(sos)

dp

记 \(f_{i,0/1/2,j}\) 维护答案,第二维从 0、1、2 分别表示:第 i 位上是 SOS 中的第一个 S、与前一位可组成 SO、或者其他。

第三维表示有 j 个 SOS 了,若数量大于 3,j 也为 3。

  • 当前位 \(i\) 位为第一个 S 时,可由前一位为 S,以及前一位状态为 2 转移而来:

\[f_{i,0,j}=f_{i-1,0,j}+f_{i-1,2,j} \]

  • 当前位可与前一位组成 SO 时,那么上一位为 S:

\[f_{i,1,j}=f_{i-1,0,j} \]

  • 当前位为其它状态时
    • 上一位可放 S,此时当前位不为 O 或者 S,否则就属于上面两种情况;
    • 上一位可为其他,此时当前位不为 S;
    • 上一位为 SO,当前位不为 S;

\[f_{i,2,j}=f_{i-1,0,j}\times 24+f_{i-1,1,j}\times 25+f_{i-1,2,j}\times 25 \]

  • j > 0 时,即可以有 SOS 了,那么当前位状态为 2 时,可由 SO + S 转移:

\[f_{i,2,j}=f_{i-1,1,j-1} \]

  • j = 3 时,j 的大小不再变化,写成这样:

\[f_{i,2,j}=f_{i-1,1,j} \]

C. 集训营的气球(balloon)

退背包

发现其实就是 1 到 n 个人分别选不选一血背包,要么选要么不选,因为 c 够小,用总方案数减去选一血背包的人数小于 c 的方案数即可,这样求选一血的人数小于 c 的方案数就成了 01 背包问题了。

由于每次修改,一次背包是 \(O(nc)\) 的,如果每次修改都做一次背包的话,整体是 \(O(n^2c)\),所以考虑退背包。

每次修改就相当于是把修改的那个人原有的贡献退出去,再进来新的贡献。

D.连通子树与树的重心(tree)

Qyun 的好吃博客

标签:背包,多校,一位,SOS,联训,SO,当前,times,模拟
From: https://www.cnblogs.com/YuenYouth/p/18461924

相关文章

  • 多校A层冲刺NOIP2024模拟赛06
    A.小Z的手套(gloves)明现的二分,我们先排序,假定\(a\)数组个数少,我们就对每一个\(a_i\)找一个\(b_i\)使其差不超过二分的值,然后贪心来讲,肯定找相差最大的那组但差不超过二分值的那个数最优,且先找比他小的那组(因为排过序了),然后套个\(multiset\)就过了,虽然\(n{log_n}^2\)......
  • [赛记] 多校A层冲刺NOIP2024模拟赛06
    小Z的手套(gloves)100pts最大值最小,考虑二分答案;首先排序,然后每次找出数量较少的那个数组中的每个数$x$在另一个数组中有没有值在范围$[x-mid,x+mid]$的(其中$mid$为二分的答案),其实只需找$x-mid$就行,最后判断一下所有数是否合法即可;因为已经升序排序,所以......
  • 多校A层冲刺NOIP2024模拟赛06
    多校A层冲刺NOIP2024模拟赛06\(T1\)A.小Z的手套(gloves)\(100pts/100pts\)容易发现将选出的左右手套各升序排序后,同一个位置上的两只手套的尺码差距一定在答案的候选集合里,画个数轴分讨一下就证完了。部分分\(20\%\):因为\(n=m\)所以不用管谁选谁不选的问题,故\(......
  • 多校 A 层冲刺 NOIP2024 模拟赛 06
    多校A层冲刺NOIP2024模拟赛06T小Z的手套(gloves)签到题答案显然具有单调性,排序后二分答案即可。T小Z的字符串(string)签到题注意到\(n\)较小,可以使用\(O(n^3)\)的算法,直接上大\(DP\)。设计状态\(f_{i,j,k,0/1/2}\)表示从左往右填到\(i\)位,已经填了\(j\)个\(0......
  • [赛记] 多校A层冲刺NOIP2024模拟赛05
    这场数数好数(number)100pts找三个数的和,而且允许$\Theta(n^2)$,那么我们可以维护出两个数的和,然后每次顺序遍历找这个数减去前面的某个数在任意两个数的和中有没有出现过,这个也是$\Theta(n^2)$的;所以时间复杂度:$\Theta(n^2)$,如果带$\log$会过不去,要用桶维护;点击......
  • 模拟退火与爬山法
    通过向chatGPT-4o-mini提问,我注意到所有爬山法可以解决的问题模拟退火都可以解决,所以爬山法死了我不想学爬山法。具体的,对于一个多峰函数求解最值的题目都可以用模拟退火来做。如果现在在较优解\(x\),发现了一个新的解\(x'\),如果\(x'\)比\(x\)优那么\(x\getsx'\)否则......
  • 多校A层冲刺NOIP2024模拟赛04
    02表示法直接递归即可,稍微写个高精。点击查看代码#include<bits/stdc++.h>usingnamespacestd;//#defineint__int128constintN=1e4;strings;intb[N],c[N],len;inta[N],tot;intread(){ intf=1,s=0;charch=getchar(); while(ch<'0'||ch>'9......
  • NOIP 模拟赛:2024-10-12
    T1:break忘了写,于是-20pts离散化,若一个段被\(\ge3\)个线段覆盖,无解;否则答案为\(2^{cnt}\),\(cnt\)为连通块个数。T2:推式子题,注意轮数\(\le\logn\)即可。T3:T4:一种新的树的生成方式。这个数据范围,一眼状压。考虑一颗以\(u\)为根的树\(T\)怎么生成:枚举\(u\)的......
  • 多校A层冲刺NOIP2024模拟赛05
    好数(number没啥好说的直接\(O(n^2)\)枚举即可。点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=2e6+107;constintd=2e5;intn,a[N],sum[N];intread(){ intf=1,s=0;charc=getchar(); while(c<'0'||c>'9'){if(c==�......
  • [46] (多校联训) A层冲刺NOIP2024模拟赛06
    HDK在与mt19937_64先生的石头剪刀布比赛中拿下十一连败的好成绩你也来试试吧#include<bits/stdc++.h>usingnamespacestd;#include"include/hdk/rand.h"usingnamespacehdk::Rand;chargetchar_(){charch=getchar();if(ch>='a'andch<='z......