AtCoder AGC #3 Virtual Participation

Havana真好听qwq

AB题就不写了 SB

C.BBuBBBlesort!

有一个长度为$n$的数列

你每次可以用两种操作

1.交换两个相邻元素

2.交换两个隔且仅隔了一个的元素

求把数列排成有序的,最少需要多少1操作

sol:显然,2操作并不会改变排序后元素所处位置的奇偶性

我们找到所有排序后位置与现在位置差为奇数的点,再除以2就可以了

D.Anticube

给出$n$个两两不同的数,选出一些数使得不存在两个数的积是完全立方数,求能选出的最大数量

sol:套路

把每个数分解质因数,求出他们每个质因数次数膜3的值

然后每次选择两个“互补”的数中较大的那个数就可以了

因为数不超过${10^{10}}$,可以用不超过${10^{\frac{10}{3}}}$的质数来筛

筛掉的这些数可以求出最简表示和补数

剩下的数都可以分成不超过两个质因子

然后就完全平方判一下就可以了

E.Sequential operations on Sequence

一个由$1,2,3,4,...,n$组成的数列,有$Q$次操作,每次操作包含一个$q_i$表示将数列无限重复,然后取前$q_i$项组成一个新的数列

$q_i \leq 10 ^ {18}$

求最后数列中$1$到$n$各出现了多少次

sol:

首先,如果前面的$q_i$大于后面的,那肯定是一次无效操作,我们可以删去

于是$q_i$递增

然后...就是神仙操作了

我们记一个$f_x$表示“第$x$次操作后的序列在最后的序列中出现了多少次”

显然,第$i$次操作后的序列肯定是由很多次第$i - 1$次操作后的序列加上一段第$i - 1$次操作后的序列的前缀组成

完整的部分显然是可以直接拿$f_{x- 1}$转移到$f_x$的

考虑剩下的一段前缀

剩下的一段前缀,肯定是由$x - 1$之前的某个操作后的序列搞出来的

我们可以二分这个序列是第几次操作后的序列

二分得到一个$ans$,它会对这个前缀产生一些贡献,可能还会再剩下一些

但剩下的不会超过$len(prefix)$ % $len(sequence(ans))$

然后就是一个结论,一个数膜一个比它小的数,最多膜log次

于是就是$O(log^2n)$的

F.Fraction of Fractal

给你一个黑白图案和一个分形次数$k$

每次分形是用$k-1$次分形当做“黑格”,大白方块当做“白格”如初始图案那样拼起来

问最后有多少黑色连通块,取膜

$k \leq 10^{18}$

sol:

这么大 矩阵快速幂

比上一题好想一点...

我们设$x$为初始黑块数

首先,如果分形边界没有黑格,直接就是$x^{k}$

只有当它上下左右连通的时候才会产生影响

1.如果全都连通,直接就是$1$

2.如果仅有上下连通或者左右连通

因为旋转90度的话这两个就是一种情况了,我们现在只考虑左右连通的情况

我们可以dp

$f[i]$表示$i$阶分形黑色连通块数量

$g[i]$表示$i$阶分形有多少个联通块满足,当它跟它的复制左右拼起来时会和一个联通块连在一起

转移就是$f[i] = f[i - 1] * x - g[i - 1] * w$

然后$g[i] = f[i -1] * y$

$w$表示原图中有多少对左右相邻的黑格

$y$表示原图中最左边一列和最右边一列拼起来有多少黑色相邻

这样就是一个齐次递推式,我们可以矩阵乘法

原文地址:https://www.cnblogs.com/Kong-Ruo/p/9676621.html

时间: 2024-10-29 03:00:24

AtCoder AGC #3 Virtual Participation的相关文章

HDU 5334 Virtual Participation

简单构造,设数列为1,1,...,1,2,2,...,2,3,3,....,3 设有 x 个1,y 个 2, z 个 3,枚举x,y即可. 不同的连续子序列有x + y + z + x*y + y*z + x*z.... 因为事实上K<=10^9时,最小的合法的 x 也不超过100... 所以复杂度远远没有想象中那么高..... Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/

HDOJ 5534 Virtual Participation 构造

构造 小于10^5的直接输出1 大于10^5的构造如下的串 1111...12222...233....3.....t,t+1,t+2.. 设长度为n,每种字符出现了L[i]次则不同的串有  n*n+n-sigma(L[i])=2*K 大约估计一个n,用贪心求出L Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi

解题报告 之 HDU5334 Virtual Participation

解题报告 之 HDU5334 Virtual Participation Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he asks rikka to have some practice on codeforces. Then she opens the problem B: Given an integer , she needs to come up wit

hdu5334(2015多校4)--Virtual Participation(构造)

题目链接:点击打开链接 题目大意:给出一个数字k,要求做出一个长度小于等于10^5的序列,该序列中不相同的连续子序列有k个. 构造啊,,,,,,一点辙都没有 使用连续的数字做成序列,可以省事的计算出不相同的子序列有多少个. 使用n个1,那么不相同子序列有n种. 使用n个1和m个2,那么不相同的子序列有n+m+n*m种. 使用n个1,m个2和l个3,那么不相同的子序列有n+m+l+n*m+n*l+m*l种. 当k小于等于10^5时,直接输出k个1. 当k大于10^5时,对于使用1,2,3的情况可以

hdu5334 Virtual Participation 多校联合第四场

题意:给你一个数k,让你输出一个长度为n的数列, 该数列满足 不相等的子序列的个数和为k 关于不相等的定义题中有给出 思路:规律题  当k小于十万时,直接输出k个1,如果题目不要求n的范围 这道题可以都是输出k个1..... 当k大于十万时首先对于一个1到n的数列 它对应的k值为n*(n+1)/2,然后打表 打到45000 就够了,然后再判断表中离k最近切大于k的数是多少,假设为n,我们想办法使其减去n即可办法如下:对于一个1到n的数列,如果我们将其某个数变为1(不与1相邻) 那么其k值就会减一

HDU 5334 Virtual Participation(2015多校第四场)

Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he asks rikka to have some practice on codeforces. Then she opens the problem B: Given an integer K, she needs to come up with an sequence of integers A 

【题解】Atcoder AGC#16 E-Poor Turkeys

%拜!颜神怒A此题,像我这样的渣渣只能看看题解度日╭(╯^╰)╮在这里把两种做法都记录一下吧~ 题解做法:可以考虑单独的一只鸡 u 能否存活.首先我们将 u 加入到集合S.然后我们按照时间倒序往回推,如果在时间 t 的时候发现有 u 和 v 同时被抉择,为了保证 u 的存活我们只能杀掉 v,也就是说在 t - 1的时刻 v 必须存活.这时我们将 v 加入到集合 S 中,再继续进行这个过程.如果在某个时刻我们发现 u 和 v 同时被抉择,可 u 和 v 都已经在集合中出现过了(要求在这个时刻一并存

HDU 5334(Virtual Participation-(A+C+1)(B+C+1)=K+(1+C)^2-C)

Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 886    Accepted Submission(s): 257 Special Judge Problem Description As we know, Rikka is poor at math. Yuta is worrying ab

Codeforces Round #379 (Div. 2) 总结分享

前言 初入acm的新手,打算在cf混.这几天没有比赛,就做了个最新的Virtual participation.虽然说div2比较简单,但还是被虐得体无完肤...Orz.两个小时,共6道题.最后只AC了AB两道,花了20分钟,剩下的100分钟也不知道哪去了(逃 A.B两道水题没什么说的.那我们从C题开始吧: C. Anton and Making Potions 题意: 制作n瓶药水,初始时每制作一瓶花费x秒,有两类法术,第一类(包含m个法术)使制作每瓶药的时间由x变为a[i] (a[i] <