首页 > 其他分享 >模拟赛 2024.2.16 解题报告

模拟赛 2024.2.16 解题报告

时间:2024-02-26 11:14:30浏览次数:14  
标签:状态 2024.2 frac gcd space sum 16 nd 解题

A. 楼房搭建

题意:有 \(n\) 个数 \(a_{1...n}\),以及初始全是 \(0\) 的 \(b_{1...n}\)。现在每次选择一个 \(i\in[1,n-1]\),然后选择下面一个操作:

  • \(a_i\gets a_i+1, \space a_{i+1}\gets a_{i+1}+2\)

  • \(a_i\gets a_i+2, \space a_{i+1}\gets a_{i+1}+1\)

求使得 \(\forall i,b_i\ge a_i\) 的最小操作次数。 \(1\le n\le 10^6\)


最小操作次数相当于使得操作后 \(\sum\limits_{i=1}^n (b_i-a_i)\) 最小,称这是溢出来的部分。

显然有一个 dp:设 \(f[i,j]\) 表示处理了前 \(i\) 个数,并且除了 \(b_i\) 其他都达到要求,且 \(b_i\) 还需要加 \(j\) 才能到达 \(a_i\),此时我们溢出来的和的最小值。

考虑从 \(f[i-1,j]\) 到 \(f[i,]\) 的转移。转移采用贪心思想,我们一定不会在此时给 \(i-1\) 多加数,宁愿让 \(i\) 多留出一些,因此可以枚举两种操作分别多少次。

画一下发现 \(b_i\) 最多加 \(2j\)(每次给 \(b_{i-1}\) 加一,给 \(b_i\) 加二),当 \(j\) 为偶数时最少加 \(\frac j2\)(每次给 \(b_{i-1}\) 加二,给 \(b_i\) 加一),当 \(j\) 为奇数时最少加 \(\frac{j-1}2+2\)(留一次给 \(b_{i-1}\) 加二,\(b_i\) 加一,其余给 \(b_{i-1}\) 加一,\(b_i\) 加二),而且 \(j=1\) 时也是成立的。。

手玩一下,我们能给 \(b_i\) 加的数总和呈一个公差为 \(3\) 的等差数列,首项为 \(l\),末项为 \(r\)。而 \(b_i\) 减去数列中每一个数,便是能更新到的状态,因此不妨猜测状态也是一个公差为 \(3\) 的等差数列。

相邻两个状态 \(x,x+3\) 能更新到的最大状态为 \(b_i-2x,b_i-2(x+3)=b_i-2x-6\),仍然满足差值是 \(3\) 的倍数。而且只有 \(1\) 这一个状态更新一个,其他状态都能更新至少两个,这些更新到的状态是连续的,所以我们的猜测成立。

可是每个状态对应的最小值不会不一样吗?其实是一样的,考虑什么时候 dp 转移时会加东西,必然是在消除 \(b_{i-1}\) 的前提下,\(b_i\) 他溢出了,此时我们可以令能更新到的状态为 \(0\) 这一个(\(b_i\) 还需要加 \(0\) 才能满足要求),发现此时 \(f[i,]\) 每个状态对应的最小值是一样的(因为只有一个状态),进一步即可得出每个状态的值都一样。

因此,我们只需要储存 \(l,r\) 表示当前 dp 数组的状态等差数列的首项和末项,时间复杂度 \(O(n)\)。


B.手链强化

题意:一个 \(n\) 个点的环,以及 \(k\) 种非白色的颜色,一开始所有点为白色。每次把一个点涂成任意一种颜色(会覆盖之前的颜色),然后把相邻的点涂成白色。经过任意次操作后,环的状态有多少种(旋转后相同算同一种),模 \(10^9+7\)。 \(1\le n,k\le 10^9\)


考虑 Polya 定理,枚举每个置换,相当于枚举这个环旋转的次数 \(i\)。大环会形成 \(\gcd(i,n)\) 个子环,每个子环颜色都一样。

可知最终状态非白点不相邻,并且都能达到。对于连续 \(\gcd(i,n)\) 个点,每个点各属一个子环,我们只需要满足这些点拎出来构成的环中,非白点不相邻。

设 \(g(m)\) 表示 \(m\) 个点构成的环非白点不相邻的方案数,答案为

\[\frac 1n\sum_{i=1}^n g(\gcd (i,n)) \]

化一下

\[\begin{aligned} & \space\space\space\space\space\space\frac 1n\sum_{i=1}^n g(\gcd (i,n)) \\ &= \frac 1n\sum_{d|n} g(d)\sum_{i=1}^{\frac nd} [\gcd(i\cdot d,n)=1] \\ &= \frac 1n\sum_{d|n} g(d)\sum_{i=1}^{\frac nd} [\gcd(i,\frac nd)=1] \\ &= \frac 1n\sum_{d|n} g(d)\cdot \varphi(\frac nd) \end{aligned} \]

\(\frac nd\) 太大,欧拉函数不好算。把 \(n\) 分解质因数,dfs 每个质因子来枚举约数,边 dfs 边计算当前约数的 \(\varphi\)。

最后的问题:如何计算 \(g(m)\)?

断环为链,设 \(f(m)\) 表示一条长度 \(m\) 的链的答案。钦定第一个点白色为 \(f(m-1)\),钦定最后一个点白色为 \(f(m-1)\),减去两个都白色 \(f(m-2)\),即 \(g(m)=2f(m-1)-f(m-2)\)。

对于 \(f\),有 \(f(m)=f(m-1)+k\cdot f(m-2)\),矩阵乘法随便搞搞就行。

时间复杂度 \(O(d(n)\cdot \log n)\)。

C.数字收藏

水题没有意义。

标签:状态,2024.2,frac,gcd,space,sum,16,nd,解题
From: https://www.cnblogs.com/Sktn0089/p/18016952

相关文章

  • 近期总结 2024.2.20
    AGC050CBlockGame题意:一个由B,S组成的字符串\(s\),你和对手在一个无限长的一维网格图进行游戏,对手一开始在其中一个格子。游戏第\(i\)轮:若\(s_i\)为B,你在网格图上的一个没有障碍以及非对手所在格子的格子上放一个障碍。若此时对手左右相邻两个格子上都有障碍,你胜利并......
  • 近期总结 2024.2.23
    dp专场。CF1784EInfiniteGame题意:一个由a和b构成的字符串\(s\),长度为\(n\)。两个人Alice和Bob在玩游戏,第\(i\)场中如果\(s_{(i-1)\bmodn+1}\)为a则Alice赢,否则Bob赢。两人遵循三局两胜原则:每当一个人胜场满两场时,称那个人赢了一轮,然后清空胜场记录开始......
  • 7. LCD1602自动巡检方式显示16路温度数据的编程实现
    在多路温度数据,多路压力数据或者多路其它数据采集的过程中,我们借用一个屏幕来显示的时候,一般选用两种模式:自动巡检模式:上电的时候默认的就是这种模式,上节课使用了4个菜单,也就是4个屏,每个屏采集了4路数据,这样的话就相当于让其处于自动巡检的模式,每隔一定的时间来切换一个界面,从而......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    目录写在前面ABCDE写在最后写在前面比赛地址:https://codeforces.com/contest/1923。为唐氏儿的寒假带来了一个构式的结局,飞舞一个。天使骚骚不太行啊妈的,推了三条线了感觉剧情太白开水了,咖啡馆也是这个熊样子、、、A签到。显然最优的策略是不断地选择最右侧的1进行操作,每......
  • 2024.2.24 咸话
    昨天一直经典考前毫无必要的emo。于是根本做不动题。今天变得更摆了。不过还是记下一点今天发生的事,省的我现在老是回想。/ll晚上去江边看江对面的烟花,中间有不少还是挺好看的,但是感觉如果中间一些比较惊艳的烟花放在最后不是更好吗qwq比较有趣的是识别无人机摆出的图案是什......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    EducationalCodeforcesRound162(RatedforDiv.2)A-MovingChips解题思路:模拟一下,不难发现是\(1\)之间\(0\)的个数。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusin......
  • 图像识别算法--VGG16
    前言:人类科技就是不断烧开水(发电)、丢石头(航天等)。深度学习就是一个不断解方程的过程(参数量格外大的方程)本文内容:1、介绍VGG16基本原理2、VGG16pytorch复现图像识别算法--VGG16目录图像识别算法--VGG161、参考文献2、VGG16理论2.1VGG16优点2.2VGG16网络结构图2.2.1复现代......
  • ../inst/include/Eigen/src/Core/MathFunctions.h:487:16: error: no member named 'R
    Asmentionedin conda-forge/r-base-feedstock#163(comment),IsuccessfullyinstalledsctransforminMacsiliconM1Maxbyfirstrun exportPKG_CPPFLAGS="-DHAVE_WORKING_LOG1P intheterminalandtheninstallthepackageinR.......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    不会F的场。A答案是最左的\(1\)和最右的\(1\)之间的\(0\)的个数。Code#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intmain(){ ios::sync_with_stdio(false); cin.tie(0); intt; cin>>t; while(t--){ intn; cin>>n......
  • Educational Codeforces Round 162 [Rated for Div. 2]
    第二次,三道题,剩下的回学校再补,总结:还是需要多练习A:让数列里所有的1都挨在一起,可以看出,相邻1之间有多少个0就需要操作几次,特判:当只有一个1或者原本全是1就输出0;voidsolve(){cin>>n;inttop1=0,top2=0,cnt=0;memset(a,0,sizeof(a));memset(b,0,siz......