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. C#设计模式15——观察者模式的写法

    是什么: 观察者模式是一种设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象状态发生改变时,它的所有依赖者都能够得到相应的通知并作出相应的反应.观察者模式也被称为发布-订阅模式. 为什么 ...

  2. PMP项目变更管理及变更流程总结

    转载请注明出处: 1. 变更管理流程 2.变更管理流程十步: 0 预防--1发起变更请求--2分析影响--3备选方案--4CCB批准--5更新项目管理计划--6沟通干系人--7执行--8检查--9总结 ...

  3. 15-触摸按键控制LED灯

    1.触摸按键 触摸按键可分为四大类:电阻式,电容式,红外感应式和表面声波式 电阻式触摸按键使用人体破压电阻,改变电阻,实现开关效果,耐用性差,很少使用 红外感应式是通过红外扫描的方式,一般使用在比较恶 ...

  4. STM32 芯片锁死解决方法

    芯片锁死原因: 1.烧进去的工程对应器件与目标器件不一致: 2.烧进去的工程HSE_VALUE与目标板上晶振频率不一致: 3.... 解决方法: 1.工程设置 2.按住复位按键,或短接复位脚电容,点击 ...

  5. html监听标签的resize

    <html> <body> <div id="div1" style="width:100%;height:100%;"> ...

  6. [转帖]数据可视化之redash(支持43种数据源) (转自https://anjia0532.github.io/2019/07/08/redash/)

    https://www.cnblogs.com/a00ium/p/13177272.html 人类都是视觉动物,讲究一图胜千言.如果没了可视化,那么你在跟领导汇报工作时,很大程度会鸡同鸭讲.其实 ex ...

  7. 【转帖】基于paramiko的二次封装

    https://www.jianshu.com/p/944674f44b24 paramiko 是 Python 中的一个用来连接远程主机的第三方工具,通过使用 paramiko 可以用来代替以 ss ...

  8. ipset的学习与使用

    ipset的学习与使用 场景说明 虽然可以通过: firewall-cmd --zone=trusted --add-source=$1 --permanent && firewall ...

  9. Linux用户以及ssh安全相关设置

    Linux用户相关操作 摘要 最近重保, 需要进行网络安全防护. 部分同事处理过程总是顺序有一些不太对的情况. 同时发现自对Linux用户设置也存在很多不清不楚的地方 所以趁着周末学习和总结一下. 用 ...

  10. [转帖]技术派-汇编语言指令集(intel X86系列)

    针对汇编语言指令集(intel X86系列8086/80186/80286/80386/80486) AAA - Ascii Adjust for Addition        AAD - Asci ...