5.22考试总结(NOIP模拟1)

改题记录

T1 序列

题解

暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts)

正解的话:

先用欧拉筛把1~n的素数筛出来

void get_Prime()
{
for(int i=2;i<=M;i++)
{
if(!b[i])
pri[++tot]=i;
for(int j=1;j<=tot&&i*pri[j]<=M;j++)
{
b[i*pri[j]]=true;
if(!(i%pri[j]))
break;
}
}
}

然后对于p=1的情况进行特殊处理,也就是求一下序列中连续的一样的数

for(int i=1;i<=n;i++)
{
if(s[i]==s[i-1])
res++;
else
{
ans=max(ans,res);
res=1;
}
ans=max(ans,res);
}

主要就是对于p>1的处理了。。。

对于是s[i]和是s[i-1]求一下他们最小的公比

假设其中比较大的一个为 x,另一个 y。

  1. 首先要满足 x%y=0

  2. 让 z=x/y,然后把 z 质因数分解,z=\(p_1^{q_1}*p_2^{q_2}*p_3^{q_3}......\),

设 \(Gcd=gcd(q_1,q_2,q_3...)\),那么当前序列的最小公比就是 \(p_1^{q_1/Gcd}*p_2^{q_2/Gcd}*......\)

将数据存到一个pl数组里,

pl[i]表示s[i]与s[i-1]d最小公比


int find(int x,int y)
{
if(y>x)
swap(x,y);
if(x%y)
return 0;
int temp=x/y,cnt=0,ret=1,Gcd;
memset(p,0,sizeof(p));
memset(q,0,sizeof(q));
for(int i=1;i<=tot;i++)
{
if(temp==1)
break;
if(temp%pri[i])
continue;
p[++cnt]=pri[i];
while(temp!=1&&temp%pri[i]==0)
{
temp/=pri[i];
q[cnt]++;
}
}
Gcd=q[1];
for(int i=2;i<=cnt;i++)
{
if(Gcd==1)
break;
Gcd=gcd(q[i],Gcd);
}
for(int i=1;i<=cnt;i++)
ret*=ksm(p[i],q[i]/Gcd);
return ret;
}
for(int i=2;i<=n;i++)
pl[i]=find(s[i],s[i-1]);

接下来就是对于pl的运用了

设l表示有等比序列的一段的左端点,r为右端点

用vis数组存一下现在的序列里s[i]的位置,即vis[s[i]]=i;

遇到不可以进等比序列的直接清空vis重置l和r就OK了

\(code\)

\(T2\)熟练剖分

题解

初始化,线性求逆元什么的就不多说了,主要说一下算法主体

所谓精彩操作无非就是一个最长链

而这个东西显然是可以由子节点转移到父亲节点的。

考虑dfs,

用f[i][j]表示以1~i分别为根节点,最长链为j的概率的前缀和

对于一个点,先枚举它选择的重儿子,然后扫一遍它的所有儿子,再枚举深度

令 \(G[i][j]=\sum_{k=0}^{k\le j}{F[i][k]}\),

假如当前扫的儿子是 x(x 是重儿子)。

\(F[i][j]=F[x][j]*G[i][j]+G[x][j]*F[i][j]-F[x][j]*F[i][j]\)

式子的第一部分也就是\(F[x][j]*G[i][j]\)表示最长链在以x为根的子树的概率

\(G[x][j]*F[i][j]\)则表示最长链在除x及其子树外其他点的概率

两部分有一个重叠的\(F[x][j]*F[i][j]\),减去就好了

不难发现g可以在dfs中压缩到一维,

因为我们要用子节点来更新父亲节点,因此先进行对子节点的扫描,同时更新siz[i] (以i为根节点的子树的大小)

在下面对于f,g数组更新时,不难发现,siz[i]以后的是没有用的,因此只需要枚举0~siz[i]就够了

因为这一层如果同时更新g和f的话十分容易出错,因此拿一个h数组暂存一下f

剩下的就是在各种前缀和间反复横跳了。。。

\(code\)

\(T3\)建造游乐园

题解

这题是玄学的数论

首先考虑如何枚举偶数点度的图

可以考虑取出i-1个点 那么成图的数量为2^C(i-1,2)

(原因单独取出的i点能平衡已建图中的奇数点,原因是某种性质。。。。)

然后求带联通标号的欧拉图

转载自\(blog\)

\(code\)

5.22考试总结(NOIP模拟1)的更多相关文章

  1. 2021.9.22考试总结[NOIP模拟59]

    T1 柱状图 关于每个点可以作出两条斜率绝对值为\(1\)的直线. 将绝对值拆开,对在\(i\)左边的点\(j\),\(h_i-i=h_j-j\),右边则是把减号换成加号. 把每个点位置为横坐标,高度 ...

  2. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  3. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  4. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  5. [考试总结]noip模拟23

    因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...

  6. [考试总结]noip模拟22

    又发现模拟 \(22\) 的总结也咕掉了,现在补上它... 似乎又是gg的一场. 以为自己的部分分数打的很全,然而到后面发现自己的树剖打假了 \(\color{green}{\huge{\text{树 ...

  7. 2021.7.21考试总结[NOIP模拟22]

    终于碾压小熠了乐死了 T1 d 小贪心一波直接出正解,没啥好说的(bushi 好像可以主席树暴力找,但我怎么可能会呢?好像可以堆优化简单找,但我怎么可能想得到呢? 那怎么办?昨天两道单调指针加桶,我直 ...

  8. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

  9. 6.11考试总结(NOIP模拟7)

    背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...

随机推荐

  1. angularjs中的常遇问题整理

    1.页面中默认图片的显示 {{img || "/upload/img.png"}} 2.接口中的数据没有及时读取到,$apply $.post( url, {}, function ...

  2. [PowerShell] 快速入门, 基本语法, 常用类型, 函数, .NET 互操作

    PowerShell 快速入门 开始之前, 我们认定你已经有一定的编程基础, 熟悉 .NET 中的类型与对象. 此文章对于 .NET 开发者来说更简单哦! 在 PowerShell 中, 几乎一切都是 ...

  3. CodeForces - 879

    A 题意:就是一共有n个医生,每个医生上班的时间是第Si天,之后每隔d天去上班,问最少多少天能够访问完这n名医生 思路:直接进攻模拟就可以 代码: 1 #include<iostream> ...

  4. SE_Work4_软件案例分析

    项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求:分析软件案例 个人博客作业-软件案例分析 班级 005 这个作业在哪个具体方面帮助我实现目标 分析对比一类软件,学会规划分析软件的 ...

  5. shell脚本常用语法详解

    逻辑控制 if 语法:注意空格 a=1b=2if [ $a == $b ]then    echo "a==b"elif [ $a -gt $b ]then    echo &qu ...

  6. 【海通国际】Joe Lowry(Mr. Lithium)谈全球电池原材料供应危机

    [海通国际]Joe Lowry(Mr. Lithium)谈全球电池原材料供应危机 环球锂业公司(Global Lithium)总裁Joe Lowry日前接受了欧洲锰业Euro Manganese的邀请 ...

  7. tuple必须加上逗号

    tuple支持  空 元组 不加逗号 >>> tup4 = () tuple非空的元组必须加上逗号>>> tup4 = (55,)>>> tup4 ...

  8. 那些天,shell脚本中曾经踩过的坑

    前些天,需要实现一个需求,用脚本轮流kill服务器上的进程,观察内存变化情况,并写日志.脚本逻辑不难,但shell脚本好久不用,看过书里的语法都忘得差不多了,中间踩了不少的坑,特此记录一下,留作后续参 ...

  9. 大对象数据LOB的应用(Day_10)

    当你有永不放弃的精神,全力以赴的态度,你会惊叹自己也能创造奇迹! LOB数据类型概述 由于于无结构的数据往往都是大型的,存储量非常大,而LOB(large object)类型主要用来支持无结构的大型数 ...

  10. Spring Boot自定义属性配置文件开启提示

    前言:有时候在Sping Boot项目中需要自定义属性.又想在配置文件(*.properties)中显示提示时. 测试环境:Sping Boot2x + Maven + Lombok 准备测试的配置类 ...