A

用计算器式显示数字,可以显示 \(n\) 段。可以显示的最大数字是多少?

如果用了一个需要至少四段的数字,一定不如把这个替换成两个 \(1\) 好。

如果一共可以用偶数个,一定是全部 \(1\)。

如果一共可以用奇数个,一定是开头一个 \(7\),之后全是 \(1\)。

B

给定一个 \(01\) 序列 \(s\) 和 \(k\),\(t\) 为 \(s\) 的无限重复。求 \(x\) 的个数,\(x\) 满足:\(t\) 的前 \(x\) 个元素中的 \(0\) 的个数减 \(1\) 的个数等于 \(k\).

令 \(balance(len)=cnt_{0,len}-cnt_{1,len}\)。

注意到 \(balance(len)=[\frac{len}{n}]\times balance(n)+balance(len\mod n)\).

而 \(balance(0\sim n)\) 可以预处理出来。

我们只需要枚举 \(i=0\sim n-1\),判断 \(x-balance(i)\) 是否为 \(balance(n)\) 的倍数即可。

注意,不仅要判断倍数,还要判断 \(\dfrac{x-balance(i)}{balance(n)}\) 是否非负!!!

C

老套路题。

记 \(nxt_{pos,ch}\) 为从 \(pos\) 号位置开始,下一个 \(ch\) 在哪里出现。

一个贪心:如果遇到一个能匹配当前字符的,就一定要配上。

D

给定 \(a,m\),求所有 \(x\) 满足 \(gcd(a+x,m)=gcd(a,m)\).

\(gcd(a+x,m)=gcd(a,m)\),不妨令 \(x'=(a+x)\% m\),这样 \(gcd(a+x,m)=gcd(x',m).\)

于是现在的问题转化为:\(gcd(x',m)=gcd(a,m),x'\in [0,m).\)

设 \(gcd(a,m)=g,a=a'g,m=m'g\),因为 \(gcd(x',m)=g\),则 \(x'=x''g\)。

此时应有 \(gcd(x'',m')=1,x''\in[0,m')\),而每一个与 \(m'\) 的 \(gcd\) 等于 \(1\) 的数,都可以唯一对应到原问题中的 \(x\)。

这时问题转化为求 \(0\sim m'-1\) 中和 \(m'\) 互质的数的个数,发现 \(1\sim m'-1\) 的个数就是 \(\varphi(m')\)。

而 \(gcd(0,m')=1\) 是否成立还要看 \(m'=1\),但是 \(m'=1\) 说明 \(m=g\) 说明 \((a,m)=m\) 说明 \(m\mid a\) 说明 \(a\geq m\) 矛盾。

所以答案就是 \(\varphi(m')\).

E

给定一个 \(1\sim n\) 的排列 \(p\) 和一个花费数组 \(a\)。

可以选一个 \(k\in [1,n-1]\) 把 \(p\) 分成两半:\(p_{1\sim k},p_{k+1\sim n}\).

可以选择这两组中的一些元素移动到另外一组,第 \(i\) 个元素的移动代价是 \(a_i\)。

经过一些移动后,要求第一组中所有元素都小于第二组中所有元素。如果某一组空了,也满足条件。

求最小代价和。


枚举 \(k=0\sim n\),表示最终我们希望 \(1\sim k\) 在第一组中。

令 \(t[i]\) 表示此时把排列分成 \(1\sim i-1,i\sim n\) 两段的最小代价。(此时就是当我们枚举 \(k\) 时 \(k\) 每变一次都求一次)

对于 \(k=k'\) 时,\(t[i]=\)(\(p[1]\sim p[i-1]\) 中不属于 \(1\sim k'\) 的元素的代价之和)+(\(p[i]\sim p[n]\) 中属于 \(1\sim k'\) 的元素的代价之和),这时我们知道,如果要 \(1\sim k'\) 在第一组,答案就是此时的 \(\min(t[2],\dots,t[n])\)。

现在的问题在于,我们不能对每一个 \(k\) 都求一次 \(t\) 数组,复杂度会爆。

我们发现,当 \(k\) 加 \(1\) 时,变化其实很少:\(t[2]\sim t[pos[k+1]]\) 都 \(+a[pos[k+1]]\),\(t[pos[k+1]+1]\sim t[n]\) 都 \(-a[pos[k+1]]\)。\(pos[k+1]\) 表示在排列中 \(k+1\) 的位置。

这是因为如果我们要让 \(k+1\) 去第一组,那所有初始没有包含 \(k+1\) 的分法,也就是在 \(2,\dots,pos[k+1]\) 分开的方法,都需要额外花 \(a[pos[k+1]]\) 的代价把 \(k+1\) 放到左边。

这可以用线段树维护。区间加 + 区间最小值(求 \(t\) 的最小)。

随机推荐

  1. P3844【黄】

    这道题做的极其折磨 因为最开始小看这道题了,没用稳扎稳打的码风来写代码,直接用的那种可读性极差但勉强能跑的代码写的,最后没AC只有73分调了好久也没调对,甚至逐渐调成了64.55越来越低的分.这有多方 ...

  2. confiparse遇到特殊字符的解析处理

    一.背景:confiparse类解析mysql密码时发现包含特殊字符时出现报错的情况:配置文件如下: 代码如下: import configparser import os #读取配置 conf=co ...

  3. React技巧之设置input值

    原文链接:https://bobbyhadz.com/blog/react-set-input-value-on-button-click 作者:Borislav Hadzhiev 正文从这开始~ 总 ...

  4. 电机控制和Linux驱动开发哪个方向更好呢?

    电机控制和Linux驱动开发哪个方向更好呢? 先说结论:任何一个领域,就像世间的五行,阴阳结合,虚实结合,利弊结合.对于哪个更好,不能一概而论,最重要的是要搞清楚,你更适合哪个? 1.共鸣 当我看到这 ...

  5. C++17 解构绑定

    在python中,加入我们有一个函数返回了两个数值,如: def getData(x, y): return x,y 那么我们在使用这个函数时只需要使用两个新变量去接收函数返回值就可以: a,b = ...

  6. [转帖]使用 TiFlash

    TiDB试用 来源:TiDB  浏览 490 扫码 分享 2021-04-20 20:57:48 使用 TiFlash 按表构建 TiFlash 副本 查看表同步进度 使用 TiDB 读取 TiFla ...

  7. [转帖]VMware Workstation PRO 17.0.2正式版+激活密钥

    https://www.isharepc.com/36181.html VMware Workstation PRO 17是一个简化的桌面虚拟化应用程序. 它在同一台计算机上运行一个或多个操作系统而无 ...

  8. [转帖]Linux make: g++: Command not found

    https://www.cnblogs.com/kerrycode/p/4748606.html Linux使用make命令时遇到"make: g++: Command not found& ...

  9. [转帖]ls命令

    ls(list) 命令可以说是Linux下最常用的命令之一 #ls -l;列出文件的详细信息 #ll 以上两个命令一样,ll是ls -l的简写 #ls -al;列出目录下的所有文件,包括以 . 开头的 ...

  10. [转帖]漏洞预警|Apache Tomcat 信息泄露漏洞

    http://www.hackdig.com/03/hack-953615.htm 棱镜七彩安全预警 近日网上有关于开源项目Apache Tomcat 信息泄露漏洞,棱镜七彩威胁情报团队第一时间探测到 ...