Daniel_yuan's Blog

芙卡米天下第一可爱 n(*≧▽≦*)n

0%

POI2012

吉老师是我们的红太阳,紧随吉老师的步伐。

Distance

\(f(x)\)\(x\) 的质因数个数(相同算多个)。

那么 \(x\)\(y\) 的操作数就是 \(f(\frac{xy}{\gcd(x,y)^2})\)

而不难发现上式等于 \(f(x)+f(y)-2f(\gcd(x,y))\)

所以对于要求答案的数 \(x\),枚举 \(\gcd\) 后就只要看最小的 \(f(y)\) 即可,而这个 \(y\) 必须是枚举的 \(\gcd\) 的倍数,预处理一下即可。

Cloakroom

考虑把询问离线,那么就可以把所有查询归为 \(n^2\) 个组。

对于某个组,直接用 bitset 跑可行性背包。

复杂度 \(O(\frac{n^2k}{w})\),需要卡常。

A Horrible Poem

把字符串按照块大小为 \(1,2...n\) 分块,然后预处理每种分块每个块往前有多少个块和它一样。

对于一个查询,枚举长度的一个因子,然后查询整块是不是都相等,如果都相等就把散块拼接成一个整块再去判断这个拼接的整块和原来的整块是否相等。

画图就可以很显然的看出这个性质。

判断字符串相等直接用哈希。

需要卡常。

Fibonacci Representation

先把这个数用斐波那契数拆分。

这么拆分有一个性质——没有相邻的 \(1\)

减去一个数可以看成是把原数加上一个数,所以现在就是在这个序列上面加减,求变成全 \(0\) 的最小次数。需要注意的一个性质就是如果有两个相邻的 \(1\) 会自动往后合并。

从前往后扫,碰到一个 \(1\) 后,如果其后面第二位或者第三位有值,就在某个位置加上一个 \(1\) 使得可以连锁反应把后面那个 \(1\) 也弄掉,否则就直接删掉这个 \(1\)